в Bash, как не включать лишние аргументы в псевдоним?

10

Я пытаюсь сделать что-то вроде

alias ftp='echo do not use ftp. Use sftp instead.'

просто так, ftpчтобы случайно не использовать. Но я заметил, что

ftp abcd.com

вызовет эхо команды

do not use ftp. Use sftp instead. abcd.com

потому что abcd.comпринято считать аргументом для echo.

Есть ли способ сделать так, чтобы Bash не добавлялся abcd.comк подстановке, или заставлял echoне принимать это как дополнительные аргументы? (Есть ли решение для каждого подхода?)

Я предполагал, что смогу сделать это

alias ftp='sftp'

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

nonopolarity
источник
3
В основном вы можете запретить ftpпо-другому, но если вы хотите это сделать - используйте printfвместо echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas
Добавьте echoк sftpпсевдониму? то есть alias ftp='echo "Do not use ftp"; sftp'. Вы получите напоминание, также будучи вынужденным использовать sftp.
Джош Джолли
@JoshJolly Я хотел сделать команду остановить все вместе вместо того, чтобы позволить ей «проплыть» только для того, чтобы мне постоянно напомнили о том, чтобы не использоватьftp
неполярность
1
Обратите внимание, что псевдонимы чрезвычайно просты; они представляют собой не что иное, как простую подстановку строк (с дополнительными ограничениями, что (1) подстановка происходит только в начале командной строки и (2) она нерекурсивна). Не существует способа «настроить», как работает псевдоним, помимо определения самого псевдонима.
Кайл Стрэнд
Э - э ... извините, псевдонимы являются рекурсивными. Не уверен, что я думал.
Кайл Стрэнд

Ответы:

18

Когда вы определяете псевдоним, указанная вами команда запускается вместо той, которую вы написали. Это означает, что при запуске ftp abc.comвыполняется

echo do not use ftp. Use sftp instead abc.com

Простое решение - использовать функцию вместо псевдонима:

ftp(){ echo 'do not use ftp. Use sftp instead'; }

В качестве альтернативы, вы можете использовать printfкак предложено Костасом:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
Тердон
источник
16
alias ftp='echo do not use ftp. Use sftp instead. # '
Хауке Лагинг
источник
7
+1. Тем не менее, это как-то напоминает мне инъекции SQL: ') Сладкий трюк.
Джон WH Smith
9

Просто поставьте пробел и символ комментария #в конце строки псевдонима:

alias ftp='echo do not use ftp. Use sftp instead. #'
ftp abcd.com
do not use ftp. Use sftp instead.

Это приведет к тому, что параметры будут рассматриваться как комментарий. Просто не забудьте добавить пробел, #иначе он не будет интерпретироваться как отдельный токен после расширения псевдонима.

pabouk
источник