С GNUsed
:
sed -E 's/^.*;(.*)/\1/' file
С GNUgrep
:
grep -Po '(?!.*;).*' file
Во-первых, псевдонимы не являются функциями и не принимают аргументов. Скорее, псевдонимы представляют собой простые замены. :Когда вы набираете goto foo
в командной строке и нажимаете Enter, оболочка просто заменяет goto
значением псевдонима перед выполнением командной строки.
Следовательно, $@
не распространяется на аргументы, переданные вашему псевдониму. На самом деле, в этом случае он расширяется до аргументов, переданных оболочке или сценарию, который вы используете .Вот почему goto
работает правильно во второй раз. :Теперь вы передали каталог в качестве аргумента при поиске вашего файла .zshrc
, и $@
расширится до этого аргумента, когда вы снова объявите псевдоним.
Кроме того, поскольку вы используете "
двойные кавычки "
, $@
раскрывается сразу после объявления псевдонима. Чтобы убедиться, что это так, сразу после запуска вашей оболочки введите alias
без аргументов для просмотра ваших псевдонимов.
Если вы хотите, чтобы goto
могла обрабатывать аргументы, вы должны объявить ее как функцию:goto() { cd $@ &&... }
Однако как правило, ⚠️ следует неsource ~/.zshrc
. В зависимости от того, что находится в ваших dotfiles, это может привести к самым разным проблемам.
Вместо этого, если вы внесли изменения в файл .zshrc
и хотите применить их, вам следует либо перезапустить терминал (, закрыв текущую вкладку/окно и открыв новое ), либо перезапустить оболочку (, набравexec $SHELL
).
Ответ Марлона работает. Вместо создания псевдонима я сделал следующую функцию:
function goto {
cd $@ && exec $SHELL
}
И это прекрасно работает. Я также заметил, что поиск ~/.zshrc занимает все больше и больше времени после каждого вызова goto
.