Как я могу использовать псевдоним «emacs file.txt» для «emacs file.txt &»?

${line#*'Caused By'}— это конкретный пример подстановки переменных ${parameter#word}(, как это написано в руководстве bash, а также в стандарте POSIX для оболочки sh).

В ${parameter#word}шаблон wordбудет удален из начала значения $parameter.Он называется «Удалить шаблон наименьшего префикса», потому что он удалит самую короткую совпадающую строку префикса, которая соответствует шаблону вword##вместо #. Он удалит самый длинный . ] соответствующая строка префикса ).

В этом конкретном примере строкаCaused by(и все, что предшествует ей, благодаря *), если она существует, удаляется из значения $line. Одинарные кавычки вокруг строки избыточны.

Сравнивая результат подстановки со значением самой переменной, тест определяет, содержит ли значение $lineтекст Caused by, и печатает Yes, если содержит.

Это имеет тот же эффект, что и

if [[ "$line" == *'Caused by'* ]]; then
    echo 'Yes'
fi

в bash, ksh93или zsh, или

case "$line" in
    *'Caused by'*) echo 'Yes'
esac

в любой оболочке sh.


Цикл в вопросе считывает «строки» из стандартного ввода. См. вопрос "Понимание "IFS= чтение -r строки" для обсуждения этого.

2
05.09.2019, 21:47
1 ответ

Да, в tcsh это возможно (в отличие от оболочек в стиле Bourne -, где вместо этого вам нужно использовать функцию ). Вам нужно поместить !*в текст псевдонима, чтобы заменить параметры, переданные псевдониму, и после этого может быть еще что-то.

alias emacs 'emacs \!* &'

Полезнее использовать встроенный сервер. Начиная с Emacs 22 (IIRC ), вы можете легко запустить emacsclientи запустить Emacs, если он еще не запущен. (В более ранних версияхemacsclientсуществует, но менее полезен.)

alias e 'emacsclient -a "" \!* &'

А если Emacs работает, и вы просто хотите открыть новое окно, тогда нет необходимости запускать emacsclient в фоновом режиме :скажите ему открыть файл в существующем экземпляре Emacs и выйти.

alias e 'emacsclient -a "" -c \!*'
2
27.01.2020, 22:08

Теги

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