Как вывести точный результат выполнения команды в файл

В Ubuntu пакет command-not-foundсодержит базу данных, содержащую также множество альтернатив. После установки его можно запросить с помощью /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(, чтобы получить список альтернатив для mail).
Осторожный,если вам не нужны автоматические предложения по отсутствующим командам в bash, напишите unset -f command_not_found_handleв вашем ~/.bashrc или удалите определение глобально в /etc/bash.bashrc. (Сделайте то же самое для zsh.)

В Debian этот инструмент использует только подходящий файл -для создания базы данных, поэтому альтернативы неизвестны (не тестировались ). Там он говорит то же самое, что и apt-file search....

Исходный код Ubuntu:https://launchpad.net/command-not-found

0
07.10.2019, 00:21
2 ответа

echo— это непереносимая -команда, поведение которой различается в зависимости от реализации, версии, времени компиляции -и параметра времени выполнения, а также среды.

В частности, вы не должны использовать его, если его первый аргумент может начинаться с -(, хотя встроенная функция zsh echoявляется одной из редких реализаций, которые могут обойти это ), или если какой-либо аргумент содержит символы обратной косой черты.

В частности, со встроенной реализациейzshecho\последовательности (, такие как \n, \c, \61, \\... ), расширяются (в соответствии с требованиями POSIX. +XSI, в то время как POSIX без XSI оставляет поведение неопределенным ), если опция bsdechoне включена (отключена по умолчанию в большинстве развертываний ), а для bashони расширяются только тогда, когда xpg_echoвключено (отключено по умолчанию в большинстве развертываний ).

И zsh, иbashechoподдерживают (нестандартную -опцию)-Eдля отключения расширений (, не поддерживаемых bash, если и xpg_echo, и posix] параметры включены, хотя ).

Здесь, хотя вы могли бы сделать:

echo -E '<some data...>\\<some other data...>' > file

Что будет нормально работать в zshи в большинстве развертываний bash, было бы гораздо лучше использовать стандартную команду printf:

printf '%s\n' '<some data...>\\<some other data...>' > file

Чье поведение в этом случае полностью определяется POSIX и работает одинаково во всех реализациях.

Обратите внимание, что утилита printfявляется изобретением POSIX. Задолго до POSIX ответом оболочки Korn на эту не -переносимую echoпутаницу -была новая printвстроенная функция с ее -rвозможностью не расширять \xпоследовательности и -для пометки конец вариантов. zshимеет встроенный Korn -, подобный print, а bash— нет.

В кш и зш тоже можно сделать:

print -r - "$var"

Для печати произвольных данных, как -.

Подробнее на:

2
28.01.2020, 02:22

Если my-cmdделает что-то подобное:

echo "abc\\def"

вывод будет следующим:abc\def:обратная косая черта интерпретируется как escape-символ внутри двойных кавычек. OTOH, это рассматривается как буквальная обратная косая черта внутри одинарных кавычек:

echo 'abc\\def'

выдаст abc\\defв качестве вывода.

РЕДАКТИРОВАТЬ :Это было протестировано с помощью bash. С тех пор ОП изменил тег на «zsh», так что это не отвечает на его вопрос. Если модераторы сочтут, что это уже неактуально, я удалю.

3
28.01.2020, 02:22

Теги

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