在 Bash 中,如何不在别名中包含额外的参数?

在 Bash 中,如何不在别名中包含额外的参数?

我正在尝试做类似的事情

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.

答案1

定义别名时,将运行您设置的命令,而不是您编写的命令。这意味着当你运行时ftp abc.com,实际执行的是

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

一个简单的解决方案是使用函数而不是别名:

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

或者,您可以printf按照 Costas 的建议使用:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"

答案2

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

答案3

#只需在别名字符串的末尾添加一个空格和注释字符即可:

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

这将导致参数被视为注释。只是不要忘记在之前添加空格,#否则在别名扩展后它不会被解释为单独的标记。

相关内容