Вы могли всегда использовать другую утилиту как awk
отформатировать вывод ls
1:
/bin/ls -ls | awk '{print $7,$8,$9}'
1. Да, обычно, Вы не должны анализировать вывод ls, но в этом случае вопрос конкретно призывает к нему...
Я создал бы файл /etc/commonprofile
и источник это в обоих /etc/profile
и /etc/zsh/zprofile
. Это дает Вам возможность совместно использовать общие настройки и все еще использовать bash
соответственно zsh
определенные настройки и синтаксис в /etc/profile
соответственно zprofile
.
Zsh имеет sh режим эмуляции, который позволит ему выполнить POSIX sh код и некоторые расширения удара. Пока Вы не используете функции удара, которые не имеет zsh (с тем же синтаксисом), можно было получить тот же файл обе оболочки. Используйте emulate
встроенный для помещения zsh в режим эмуляции; с -L
опция, эмуляция локальна для функции включения (не, включение получило сценарий).
source_sh () {
emulate -LR sh
. "$@"
}
Для вещей как переменные среды можно использовать source_sh /etc/profile
в /etc/zprofile
и source_sh ~/.profile
в ~/.zprofile
, так как файлы профиля, вероятно, не используют определенные для удара функции.
Для вещей как псевдонимы и функциональные определения, так как файлы дистанционного управления оболочки, вероятно, будут содержать много вещей, которые не могут быть совместно использованы (подсказка, привязки клавиш, настройки завершения, …), использовать файл как ~/.sh_aliases
это получено в ~/.bashrc
и source_sh
'd в ~/.zshrc
.
Что относительно простой символьной ссылки?
ln -s /etc/profile /etc/zsh/zprofile
Можно также добавить что-то вроде этого при необходимости в некоторой условной инициализации:
#Determine our shell without using $SHELL, which may lie
shell="sh"
if test -f /proc/mounts; then
case $(/bin/ls -l /proc/$$/exe) in
*bash) shell=bash ;;
*dash) shell=dash ;;
*ash) shell=ash ;;
*ksh) shell=ksh ;;
*zsh) shell=zsh ;;
esac
fi
/bin/ls -l /proc/$$/exe
ps -o comm= -p $$
. Это не полностью надежно, потому что некоторые оболочки ведут себя по-другому в зависимости от того, как они были вызваны; на практике просто тестирование $0
в .profile
вероятно, будет лучший признак. Но большинство оболочек, которые предлагают полезные функции (удар, ksh, zsh) может быть просто распознано (и их определенная версия, который является большим плюс) путем тестирования некоторых переменных: $BASH
, $BASH_VERSION
, $BASH_VERSINFO
; $KSH_VERSION
, ${.sh.version}
; $ZSH_VERSION
.
– Gilles 'SO- stop being evil'
20.11.2010, 02:10
в отношении переменных, у меня появилось впечатление, что вы отсутствуете модули и модульфилы [1]. Как только вы начнете делать это, будет легко создавать общие профили для различных оболочек (включая Bash & ZSH), Python, Perl и еще больше средств, все от удобства одного модуля.
Также возможно определить псевдонимы таким же образом; Тем не менее, вы быстро найдете, что псевдонимы не наследуются очень хорошо между последовательными снарядами и могут потребоваться обходные пути.
[1] http://en.wikipedia.org/wiki/environment_modules_ (Программное обеспечение)