Вы правы, что он удивительно плохо документирован. Та документация, которая есть, довольно проста:
-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
заключается в установке этого флага в конце цикла, что гарантирует, что цикл будет выполнен только один раз.
Предполагая, что вы используете монтирование NFS с сервера NFSv4, который поддерживает ACL, вам потребуется использовать команду nfs4 _setfacl для установки ACL. Синтаксис не совсем тот.