вызов bash с опцией -t

Может ли кто-нибудь рассказать мне о опции -t при вызове bash?

Я нашел следующую удобную команду для использования облегченного терминального окна в качестве запуска приложения

 urxvt -geometry 80x3 -name 'bashrun' -e sh -c "/bin/bash -i -t" 

Посредством небольшого исследования его поведения я вижу, что -t существу делает выход bash после выполнения одной команды, но мне любопытно, есть ли еще какая-то опция -t . Я не могу найти документацию об этом, и я просмотрел следующие документы:

  • man bash
  • Вызов Bash
  • стандартные варианты bash

Мне показалось странным, что – это не так ясно изложено, как остальные варианты.

3 Solutions collect form web for “вызов bash с опцией -t”

Вы правы, что это удивительно плохо документировано. Какая документация там достаточно проста:

 -t Exit after reading and executing one command. 

Исходный код bash доступен здесь . Я посмотрел версию 4.2. Короткие флаги, обработанные bash, перечислены в flags.c и в нем есть соответствующая строка:

 { 't', &just_one_command }, 

Итак, -t в командной строке задает переменную just_one_command . Эта переменная используется только в одном месте: она встречается в if в конце цикла в eval.c :

  if (just_one_command) EOF_Reached = EOF; 

Другими словами, если задан флаг -t , то после выполнения первой команды условие конца файла сигнализируется и bash .

БОЛЕЕ ДЕТАЛЬНО

Из eval.c командной строки в bash , по-видимому, контролируется функцией reader_loop :

 reader_loop () { int our_indirection_level; COMMAND * volatile current_command; USE_VAR(current_command); current_command = (COMMAND *)NULL; our_indirection_level = ++indirection_level; while (EOF_Reached == 0) { int code; code = setjmp_nosigs (top_level); [ ... Much code removed ... ] if (just_one_command) EOF_Reached = EOF; } indirection_level--; return (last_command_exit_value); } 

Цикл внутри reader_loop продолжается до тех пор, пока не получит сигнал EOF_Reached . Единственным эффектом опции -t является установка этого флага в конце цикла, который гарантирует, что цикл выполняется только один раз.

Это объясняется на странице руководства, просто трудно найти.

Параметры, не упомянутые в блоке «ОПЦИИ» в начале, являются параметрами для set которые также могут быть заданы как параметры для bash:

Параметры также могут быть указаны как аргументы для вызова оболочки.

 -t Exit after reading and executing one command. 

Используя встроенную help bash , то есть, произнеся help set , вы найдете:

  -t Exit after reading and executing one command. 

Поскольку bash анализирует строку за раз, вы можете иметь несколько команд, разделенных ; в той же строке, и они будут выполняться. Например, следующее:

 set -t; echo Do something; echo do more; echo and more echo no more 

будет производить

 Do something do more and more 

как выход. С другой стороны, следующее:

 set -t echo Do something echo do more echo and more echo no more 

не будет производить никакой продукции.


Вы можете найти документацию на info странице. Сказать:

 info bash "Shell Builtin Commands" 

Перейдите к * Bourne Shell Builtins:: и найдите help .

  • Использование инструкции if с помощью или для проверки аргументов для сценария оболочки
  • Попытка получить конкретную информацию из массива
  • Как IFS действительно отображается?
  • Как печатать удобочитаемый формат в формате KB, MB, GB вместо K, M, G?
  • Создать узел, который содержит обновленное значение по времени
  • Есть ли способ загрузить предположительно исходный источник bash-0.99?
  • Предупреждение mdoc: пустая строка ввода #xx
  • Лучшая практика сценария BASH
  • Две связанные замены в одной командной строке?
  • bash: / usr / bin / perl: слишком длинный список аргументов
  • Почему bash отображает `>` вместо выполнения моей команды?
  • Linux и Unix - лучшая ОС в мире.