Разница между псевдонимом в Zsh и псевдонимом в Bash

9

Я искал вокруг, но не смог найти ничего убедительного. Есть ли разница между командой alias в zsh и командой alias в bash? Если нет, значит ли это, что я могу разделить псевдонимы между двумя оболочками и ожидать, что они будут работать так, как я хотел?

Zameer Manji
источник

Ответы:

7

Согласно псевдонимам Zsh Workshop они, кажется, имеют одинаковый синтаксис, поэтому они должны работать.

Райнер Бендиг
источник
Я могу засвидетельствовать это. Сделай для меня.
frogstarr78
13

Синтаксис aliasкоманды одинаков во всех оболочках в стиле Борна. Таким образом , вы можете поделиться ими через ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, до тех пор , как они имеют смысл во всех оболочках.

То же самое относится к определениям переменных и определениям функций, если вы используете подмножество синтаксиса, которое поддерживается во всех оболочках.

Если вы не используете версии zsh старше 4.0, вы можете поместить все свои независимые от оболочки определения в файл с именем (скажем) ~/.common.rc.sh, где первая строка

emulate -LR sh 2>/dev/null

Это говорит zsh ожидать sh совместимый синтаксис только в этом файле. Тогда источник, файл около начала ~/.bashrc, ~/.bashrc, ~/.kshrcи так далее.

Это в основном то, что я делаю. Например, у меня есть несколько сложного код , который генерирует псевдоним lsс моими любимыми вариантами в зависимости от того, что доступно ( --color, -G, -Fи т.д.); это не зависит от оболочки, так что входит .common.rc.sh. У меня также есть зависимые от оболочки псевдонимы, как alias zcp='zmv -C'это входит .zshrc.

Жиль "ТАК - перестань быть злым"
источник
1
Если я положу /bin/shшебанг вверху моего файла псевдонимов, будет ли он работать так, как я предназначаю для всех оболочек?
Zameer Manji
1
@ZameerManji Нет, не ставьте #!строку: это не отдельный скрипт, его можно получить только из другого скрипта. #!не меняет поведение оболочки в любом случае.
Жиль "ТАК - перестань быть злым"
3
Небольшое различие, которое я обнаружил, заключается в том, что zsh aliasобрабатывает аргумент, начинающийся с +представления опции, как это -было бы, поэтому alias +=somethingдолжен быть записан как alias -- +=somethingв zsh. Не думай, что это emulateменяет.
Микель
Будьте осторожны, ~/.shrcпоскольку Bourne Shell имеет самую мощную реализацию псевдонимов, но zshиспользует несовместимые имена опций. alias -gсоздает постоянный псевдоним в $HOME/.globalsBourne Shell. Совместное использование определений псевдонимов безопасно только при условии, что вы используете не больше, чем функции POSIX.
Шили
2

zshs aliasдопускает глобальные псевдонимы, тогда как bashs раскрывается только в начале строки.

В zsh:

alias -g L="| less -FRX"

Затем вы можете сделать:

verbose-command L

Смотрите здесь список полезных глобальных псевдонимов.

Том Хейл
источник
Называть все расширенные псевдонимы «глобальными» псевдонимами - это действительно плохая идея, поскольку существует концепция локальных псевдонимов, которые ограничены определенным каталогом, в то время как глобальные псевдонимы с 38 лет применяются к псевдонимам, которые не зависят от диктории. Эта концепция взята с 1980 года из UNOS и применяется в Bourne Shell с 6 лет. В 1980 году UNOS ввел все расширенные псевдонимы, zsh мог бы провести некоторые исследования, чтобы избежать столкновения такого типа. См. Schillix.sourceforge.net/man/man1/bosh.1.html
schily