Тестовая команда в Unix не печатает вывод

Как насчет добавления exec bash в конце Вашего .cshrc ?

Остерегайтесь, тем не менее, что это является не совсем безрисковым, таким образом, Вы могли бы хотеть сделать это в одном окне/сессии при тестировании результатов в другом, таким образом, у Вас есть шанс возвращения его. (Или имейте администратора сайта поблизости).

21
12.10.2012, 01:57
4 ответа

Вы добираетесь 0 или 1. В коде выхода.

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

Обновление: Для хранения кода выхода для более позднего использования просто присвойте его переменной:

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1
15
27.01.2020, 19:43
  • 1
    является там способом передать код выхода по каналу? номер –  indieman 11.10.2012, 10:38
  • 2
    только произвел, может быть перенаправлен. Так или иначе обычно нет никакой потребности в этом. Для хранения его для более позднего использования просто присвойте его переменной. Или скажите нам, что точно является Вашим намерением с тем значением. –  manatwork 11.10.2012, 10:41
  • 3
    Код выхода помещается в $? переменная - по крайней мере, пока это не перезаписывается следующей командой, которую Вы выполняете. –  Shadur 11.10.2012, 10:45
  • 4
    PS: можно использовать $PIPESTATUS массив для получения результата нескольких команд в конвейере. $? будет быть результатом последней команды в конвейере если pipefail опция выключена (значение по умолчанию). –  l0b0 11.10.2012, 12:26
  • 5
    @indieman, если то, в чем Вы нуждаетесь, должно сделать что-то еще на основе статуса выхода, Вы не должны даже сохранять его — просто используют if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi –  Wildcard 27.10.2016, 21:57

Иначе

test 4 -lt 6 && echo 1 || echo 0

Но будьте осторожны в этом случае. Если test успех возвратов и echo 1 сбои echo 0 будет выполняться.

5
27.01.2020, 19:43

Если Вы хотите результат сравнения по стандарту вместо кода выхода, можно использовать expr(1) команда:

$ expr 4 '<=' 6
1

Две вещи отметить:

  1. необходимо будет, вероятно, заключить оператор в кавычки, поскольку многие из них конфликтуют с метасимволами оболочки
  2. выходное значение является противоположностью кода возврата для test. test возвраты 0 для истинного (который является стандартом для кодов выхода), но expr печать 1 для истинного.
2
27.01.2020, 19:43
  • 1
    3. Существует a test встроенная оболочка, который значительно быстрее (приблизительно 50 раз на моей машине), чем test и expr исполняемые файлы от coreutils пакета. –  manatwork 11.10.2012, 14:18
  • 2
    +1 для второй точки. Мог получить ошибку, которая очень печальна, чтобы найти, портите ли Вы это. –  Emanuel Berg 11.10.2012, 20:18

Вы можете ввести следующую команду:

echo $(test -e myFile.txt) $?
2
27.01.2020, 19:43

Теги

Похожие вопросы