Ни
man [
, ни[--help
] не работают
На некоторых дистрибутивах (например, Ubuntu), man [
следует символической ссылке на test (1)
. На других (например, Arch) это не так. (Но справочная страница test
также документирует использование [
])
type -a [
показывает, что есть как встроенная оболочка, так и исполняемый файл.
$ type -a [
[ is a shell builtin
[ is /usr/bin/[
bash-builtin [--help
просто выводит сообщение об ошибке. (Но так как это встроенная функция, вы можете использовать help [
или посмотреть справочную страницу / docs bash).
/ usr / bin / [--help
выводит полную справку (для версии GNU Coreutils), которая начинается с:
$ /usr/bin/[ --help
Usage: test EXPRESSION
or: test
or: [ EXPRESSION ]
or: [ ]
or: [ OPTION
Exit with the status determined by EXPRESSION.
--help display this help and exit
--version output version information and exit
и затем описывает разрешенный синтаксис для EXPRESSION.
Это еще один способ узнать, что [
и test
эквивалентны.
Кстати, если вы программируете для bash (или пишете однострочники в интерактивном режиме), я бы рекомендовал [[
вместо [
]. Лучше несколькими способами, см. Ссылки в ответе Серга.
EOF
на самом деле не "отправляется". Это событие, когда ваш процесс вызывает системный вызов read
и возвращает 0
, что для каналов происходит, когда другой конец канала закрыт (всеми процессами, у которых он есть, если файловый дескриптор дублируется).
Ядро всегда будет закрывать всефайловые дескрипторы при завершении процессов.
Обойти это невозможно (даже файловые дескрипторы SIGKILL-процессов закрываются). Если какой-либо из этих файловых дескрипторов является последней ссылкой на конец записи файлового дескриптора конвейера, следующее чтение
в соответствующем конце чтения вернет 0, что stdio
будет интерпретировано как EOF.
.
Вероятно, это не проблема, если отправляется несколько символов EOF
. Таким образом, вы можете запустить свою Java-программу вместе с кодом оболочки, который выводит EOF
после выхода из Java-программы.
( javaprog ; echo -n $'\4' ) | program_waiting_for_eof
Тем не менее, необходима некоторая конфигурация для обработки сигналов, чтобы гарантировать, что процесс Java будет уничтожен, но последующий код все еще будет выполняться. Если это подходящий подход для вас (который вы можете протестировать, уничтожив процесс Java напрямую с помощью kill $PID
с другого терминала), то я могу предоставить дополнительную информацию, как это сделать, если вам это нужно.