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

Я просто нашел способ запустить 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).

  • Почему zsh открывает дескриптор файла одним?
  • LS_COLORS не соблюдается на Cygwin
  • Липкие записи в истории оболочки
  • Локальные `set -e` для функций
  • zsh: Определяется словарь `key` ->` terminfo`
  • tmux резко выходит сразу после загрузки
  • Автозаполнение флагов после подкоманды
  • zsh функция экспорт иглы подробный
  • 256 цветов в Zsh
  • Проблема с передачей параметров, содержащих пробелы и символы wild card
  • Cygwin: компакт-диск для Windows легко
  • Interesting Posts

    Замените пробелы в начале строки на "-"

    Как я могу предотвратить запуск приложений с максимальным увеличением их окон?

    Postfix – конверт и заголовок тела

    Как узнать идентификаторы первого и последнего сектора жесткого диска?

    Определить поврежденный файл с заданным номером логического блока

    Развлечения с Ubuntu 16.04 и mysql

    Получить имя модели блока и производителя от псевдо-fs

    Мой cron не работает, ничего не отображается в / var / mail / <имя_пользователя> или в / var / log / syslog

    Как оценивать различные оболочки

    Bash выберите вариант, не нажимая enter.

    Есть ли альтернативы пидофу? (меньшая площадь основания)

    Синхронизация Pi с локальным каталогом

    Почему переадресация портов через захват libvirt с помощью внешнего NAT-трафика?

    Как выделить всю строку журнала в цвете с помощью многопользовательского режима

    Что произойдет, если я запустил «вилку» на моей машине?

    Linux и Unix - лучшая ОС в мире.