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

non*_*ity 10 bash ftp alias echo

我正在尝试做类似的事情

alias ftp='echo do not use ftp. Use sftp instead.'
Run Code Online (Sandbox Code Playgroud)

只是为了ftp不会被意外使用。但我注意到

ftp abcd.com
Run Code Online (Sandbox Code Playgroud)

将导致命令回显

do not use ftp. Use sftp instead. abcd.com
Run Code Online (Sandbox Code Playgroud)

因为abcd.com被认为是 的参数echo。

有没有办法让 Bash 不添加abcd.com到替换中,或者echo不将其作为额外的参数?(每种方法都有解决方案吗?)

我以为我能做到

alias ftp='sftp'
Run Code Online (Sandbox Code Playgroud)

但我只想让命令全部停止以提醒自己不要使用ftp.

ter*_*don 18

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

echo do not use ftp. Use sftp instead abc.com
Run Code Online (Sandbox Code Playgroud)

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

ftp(){ echo 'do not use ftp. Use sftp instead'; }
Run Code Online (Sandbox Code Playgroud)

或者,您可以printf按照科斯塔斯的建议使用:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
Run Code Online (Sandbox Code Playgroud)


Hau*_*ing 16

alias ftp='echo do not use ftp. Use sftp instead. # '
Run Code Online (Sandbox Code Playgroud)

  • +1。然而不知何故,这让我想起了 SQL 注入 :') 甜蜜的把戏。 (7认同)

pab*_*ouk 10

只需#在别名字符串的末尾放置一个空格和注释字符:

alias ftp='echo do not use ftp. Use sftp instead. #'
ftp abcd.com
do not use ftp. Use sftp instead.
Run Code Online (Sandbox Code Playgroud)

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