В моих ~/.shortcuts меня есть символические ссылки на некоторые часто используемые каталоги.

В .bashrc (OS X) я делаю это:

ls -1 ~/.shortcuts | xargs -I {} alias {}="'cd -P ~/.shortcuts/{}'"

Когда я запускаю alias в терминале, вывод показывает новые добавленные псевдонимы, но ни один из них не работает.Зачем?

У меня есть некоторые псевдонимы, такие как alias ll='ls -l' определенные в .bash_aliases . . ~/.bash_aliases в .bashrc прекрасно загружает мои пользовательские псевдонимы. Но когда я перенаправляю xargs -t в файл tmp и отправляю его в bashrc (так же, как я использую .bash_aliases), он не работает.

Что я делаю неправильно?

1 ответ1

5

Это не работает, потому что этот alias запускается в подоболочке, которая выходит сразу после этого. Это никогда не влияет на оболочку, которая запустила конвейер.

Вы должны попробовать что-то вроде:

for short in ~/.shortcuts/* ; do
  alias $(basename $short)="cd -P $short"
done

Это предполагает, что в этой папке нет файлов с забавными символами (например, пробелами) в их именах.

(Вообще говоря, не анализируйте вывод ls, используйте функции globbing вашей оболочки.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .