Что проверяет ?

Я просто нашел способ запустить zsh когда я запускаю bash на Windows из

https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/ .

Он рекомендовал добавить следующий код на последнем из .bashrc .

 # Launch Zsh if [ -t 1 ]; then exec zsh fi 

Что означает [ -t 1 ] ?

Это правда?

Тогда, могу ли я просто сделать это?

 exec zsh 

3 Solutions collect form web for “Что проверяет ?”

[] является ярлыком команды test .

Согласно man test :

-t FD
Истина, если FD – файловый дескриптор, связанный с терминалом.

Поэтому, если вы используете bash в качестве интерактивной оболочки (терминал – см. Эту тему для объяснения терминологии), bash будет заменен на zsh.

Подробнее о файлах .bash *:

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром –login , она сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения. Опция -noprofile может использоваться, когда оболочка начинает блокировать это поведение.

Когда оболочка входа завершается , bash считывает и выполняет команды из файлов ~ / .bash_logout и /etc/bash.bash_logout, если файлы существуют.

Когда запущена интерактивная оболочка, которая не является оболочкой входа , bash считывает и выполняет команды из ~ / .bashrc , если этот файл существует. Это может быть заблокировано с помощью параметра –norc. Параметр файла -rcfile заставит bash читать и выполнять команды из файла вместо ~ / .bashrc.

Комментарий Стефана Чазеласа:
Обратите внимание, что оболочка может быть интерактивной без stdout, являющейся терминалом, и оболочка может быть неинтерактивной с терминалом на stdout (например, когда вы запускаете скрипт в терминале без перенаправления / вывода его вывода), а bash может читать .bashrc даже если они не являются интерактивными (например, в ssh host cmd где bash – это оболочка входа пользователя на хосте, или bash --login -c 'some code' ). case $- in *i*)... является правильным способом проверить, является ли оболочка интерактивной.

Команда test [ -t 1 ] проверяет, находится ли вывод bash на терминале. Цель этой строки – явно запустить zsh при открытии терминала, не нарушая другие использования bash. Но это сделано очень плохо.

Файл .bashrc читается в трех случаях:

  • Когда bash выполняется как интерактивная оболочка, то есть для запуска команд, введенных пользователем, а не для выполнения командных команд.
  • Когда bash является неинтерактивной оболочкой, которую запускает демон RSH или SSH (обычно из-за того, что вы запускаете ssh host.example.com somecommand и bash – это ваша оболочка входа на host.example.com ).
  • Когда он вызывается явно, например, в пользовательском .bash_profile ( выбор файлов загрузки bash немного странный ).

[ -t 1 ] – плохой способ обнаружения интерактивных оболочек. Возможно, но редко, чтобы запустить bash в интерактивном режиме со стандартным выходом, не выходящим на терминал. Чаще всего стандартный вывод идет на терминал в неинтерактивной оболочке; в неинтерактивной оболочке не работает бизнес .bashrc но, к сожалению, оболочки bash, вызванные SSH, делают. Существует гораздо лучший способ: bash (и любая другая оболочка sh-стиля) предоставляет встроенный, надежный метод для этого.

 case $- in *i*) echo this shell is interactive;; *) echo this shell is not interactive;; esac 

Итак, «запуск zsh, если это интерактивная оболочка», должен быть написан

 case $- in *i*) exec zsh;; esac 

Но даже это не очень хорошая идея: она предотвращает открытие оболочки bash, что полезно, даже если вы используете zsh. Забудьте об этом сообщении в блоге и вместо этого просто настройте свой ярлык, который открывает терминал для запуска zsh вместо bash. Не устраивайте вещи так, чтобы «всякий раз, когда вы открываете приложение Bash в Windows, он теперь запускается с помощью оболочки Zsh»: когда вы хотите zsh, откройте приложение Zsh.

человек 1 тест :

-t FD

файловый дескриптор FD открывается на терминале

Ваш пример выполняется (заменяет запущенный процесс, в данном случае bash ) с zsh on, если stdout открыто на терминале (не файл / pipe / etc).

  • Как сохранить распечатку последней команды в переменной оболочки в urxvt / zsh?
  • Запретить расширение переменных в контурах
  • Как я могу получить тип данных переменных в zsh?
  • Альтернатива bash `history -p` в zsh?
  • Могу ли я предотвратить замедление zsh с большой историей?
  • zsh и xfce4-terminal
  • Как экспортировать переменную среды из .sh-файла в zsh?
  • ESC-q не работает в tmux с zsh
  • как мне получить zsh для * просто * перечислить материал в моем текущем каталоге во время завершения табуляции?
  • zsh выбирает вложенный текст
  • разница между omz "плагинами" и "темами"?
  • Linux и Unix - лучшая ОС в мире.