Заглушка терминальной рыбной подсказки

Ваши команды не работают так, как вы ожидаете, потому что тест ничего не выводит в свой стандартный поток вывода. Это стандартный поток вывода, который передается следующей команде в конвейере (ваша первая команда ), и это стандартный вывод, который заменяет подстановку команд (вашу вторую команду ).

Кстати, обратите внимание, что даже если левая часть вашего первого конвейера выдает что-то в своем стандартном потоке вывода, echoсправа этого не отобразит. Утилита echoне читает со своего стандартного ввода (, но, например. catделает ).


Любая команда оболочки возвращает статус выхода. Этот статус выхода - это то, что, например. действует оператор if. Статус выхода никогда не выводится, например. терминал, иначе это будет мешать фактическому выводу команды или сценария.

При использовании

[ 3 -gt 4 ]

вы вызываете утилиту [с некоторыми аргументами. Эта утилита возвращает статус выхода. Это в точности эквивалентно

test 3 -gt 4

См. man testиman [(или help testв оболочке bash).

Статус выхода самой последней выполненной команды сохраняется в специальной переменной $?.

Вы можете сохранить это в обычной переменной или вывести на терминал:

[ 3 -gt 4 ]
printf 'Exit status of test was %s\n' "$?"
printf 'Exit status of printf was %s\n' "$?"

Обратите внимание, чтоprintfтакже создает свой собственный статус выхода, поэтому, если вызов printfпрошел нормально, значение $?будет равно нулю после вывода статуса теста.

Приведенный выше код, скорее всего, выведет

Exit status of test was 1
Exit status of printf was 0

Обратите внимание, что сам тест здесь никогда ничего не выводит. Он просто предоставляет статус выхода.

3
24.04.2020, 22:14
1 ответ

Это ошибка в fish, вызванная использованием символов, отличных от -ASCII, с языковым стандартом, не поддерживающим -Unicode.

Установите для вашей локали что-то, что может обрабатывать UTF -8 (, т. е. не "C" по умолчанию)

4
19.03.2021, 02:25

Теги

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