В 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
echo
— это непереносимая -команда, поведение которой различается в зависимости от реализации, версии, времени компиляции -и параметра времени выполнения, а также среды.
В частности, вы не должны использовать его, если его первый аргумент может начинаться с -
(, хотя встроенная функция zsh echo
является одной из редких реализаций, которые могут обойти это ), или если какой-либо аргумент содержит символы обратной косой черты.
В частности, со встроенной реализациейzsh
echo
\
последовательности (, такие как \n
, \c
, \61
, \\
... ), расширяются (в соответствии с требованиями POSIX. +XSI, в то время как POSIX без XSI оставляет поведение неопределенным ), если опция bsdecho
не включена (отключена по умолчанию в большинстве развертываний ), а для bash
они расширяются только тогда, когда xpg_echo
включено (отключено по умолчанию в большинстве развертываний ).
И zsh
, иbash
echo
поддерживают (нестандартную -опцию)-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"
Для печати произвольных данных, как -.
Подробнее на:
Если my-cmd
делает что-то подобное:
echo "abc\\def"
вывод будет следующим:abc\def
:обратная косая черта интерпретируется как escape-символ внутри двойных кавычек. OTOH, это рассматривается как буквальная обратная косая черта внутри одинарных кавычек:
echo 'abc\\def'
выдаст abc\\def
в качестве вывода.
РЕДАКТИРОВАТЬ :Это было протестировано с помощью bash. С тех пор ОП изменил тег на «zsh», так что это не отвечает на его вопрос. Если модераторы сочтут, что это уже неактуально, я удалю.