Как мне сделать работающую функцию псевдонима emacs ?

Ничто не сравнится с циклом при чтении при обработке текста, но на всякий случай вы хотите обработать свой datafile.tsv только один раз :

sed 's|\(.*\)|1s/genes/\1.Corrected/|' names.in | sed -f - datafile.tsv

Первый sed превращает names.in в сценарий sed :

1s/genes/name1.Corrected/
1s/genes/name2.Corrected/
1s/genes/name3.Corrected/
1s/genes/name4.Corrected/
1s/genes/name5.Corrected/

, который затем выполняется вторым sed .
Если все ваши столбцы генов расположены подряд (как в вашем примере ввода), вы также можете запустить:

tr \\n \\t 

, который похож на первый, как последний sed выполняет следующий сценарий sed :

1s/genes.*genes/name1.Corrected name2.Corrected name3.Corrected name4.Corrected name5.Corrected/

Обратите внимание, что он не будет редактировать ваш файл на месте. Для этого либо используйте sed с -i (если поддерживается), либо перенаправьте > вывод, например, на newfile затем mv newfile datafile.tsv

2
25.04.2018, 19:25
2 ответа

Взгляните на свою функцию. В этом примере я изменил некоторые имена, чтобы обвинить виновных, и сделал несколько неуместных с вашей проблемой:

recurse{} (
    recurse "$@"
}

Как вы думаете, что это сделает при вызове?

Чтобы исправить это, вы можете вызвать явный двоичный файл:

emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm /usr/bin/emacs "$@"
    else
        /usr/bin/emacs "$@"
    fi
    return;
}

Или вы можете положиться на правильную настройку пути:

emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
    return;
}
3
27.01.2020, 21:55
alias emacs='TERM=xterm emacs'

Думаю, это все, что вам нужно. Он безоговорочно устанавливает TERMв xtermи запускает emacs.

Если вы хотите сделать это только вtmux:

emacs () {
    if [ -n "$TMUX" ]; then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
}

Здесь используется рекурсивный вызов функции с commandпо , а не . Это не нужно в псевдониме. В этой функции также нет необходимости return.

2
27.01.2020, 21:55

Теги

Похожие вопросы