Тестовая команда и перенаправление bash - PullRequest
0 голосов
/ 20 ноября 2018

Почему test > file выходит с 1, а test arg1 > arg2 с 0?

Я думал, что в test arg1 > arg2 сначала применяется test arg1, затем вывод (он не имеет ни одного), записанный в файл arg2, и, поскольку последняя команда (перенаправление) была успешной, выход равен 0. Но так должно быть первый случай. Я немного смущен.

1 Ответ

0 голосов
/ 20 ноября 2018

Перенаправление не является командой.

| создает новую команду, потому что не только вывод предыдущей команды, «переданной по трубопроводу» где-то еще, но также и другая команда выполняется на этом выходе. Например,

ls | grep 'abc' выйдет из 1, если ничто не соответствует этому шаблону, независимо от того, успешно ли ls выполнено или нет). Статус выхода, который вы видите с помощью $?, является статусом последнего канала.

Перенаправление не то же самое, потому что оно не передает выходные данные следующей команде в строке, просто в файл. Обратите внимание, что перенаправление может заставить вас вернуть 1, если ваша команда иначе сработала бы, потому что у вас нет прав на запись в файл. В этом случае ваша команда не будет выполнена.

TL; DR: для выполнения команды требуется допустимое перенаправление. Если он может работать, статусом выхода будет статус выхода команды. Состояние выхода перенаправления - ИЛИ команды, и перенаправление (0 ИЛИ 1, 1 ИЛИ 1, 1 ИЛИ 0 все возвратит 1; только успешное перенаправление и успешная команда возвращают 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...