在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


3
通常,您可以ftp通过其他方式禁止,但是如果您愿意,可以使用- printf而不是echoprintf "Do not use ftp. Use sftp instead.\n\c"
Costas 2014年

echosftp别名添加到别名?即alias ftp='echo "Do not use ftp"; sftp'。您将得到提醒,同时还被迫使用sftp
2014年

@JoshJolly我想让命令停止在一起,而不是让它“帆过”,以便不断提醒我不要使用ftp
nonopolarity 2014年

1
注意,别名非常简单。它们不过是简单的字符串替换而已(附加的限制是(1)替换仅在命令字符串的开头发生,并且(2)是非递归的)。除了别名本身的定义之外,无法“配置”别名的工作方式。
Kyle Strand

抱歉,别名递归的。不知道我在想什么。
Kyle Strand 2014年

Answers:


18

定义别名时,将运行您设置的命令,而不是您编写的命令。这意味着当您运行时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'"


9

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.