Bash别名,命令中包含空格


11

我正在尝试创建一个bash别名,别名本身中有一个空格。

这个想法是别名(即con)代表sudo openvpn --config /path/to/my/openvpn/configs/con使用别名时,这将导致可读命令。

即: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

我知道我不能这样声明别名: con ="sudo openvpn --config /path/to/my/openvpn/configs/"。bash函数在这种情况下会起作用吗?我从未听说过,但是在研究此小问题的解决方案时。

Answers:


12

是的,您将需要使用一个函数。如果您想添加参数,则别名将起作用,给别名的任何参数都作为参数传递给别名程序,但作为单独的参数传递,而不是简单地附加到那里。为了显示:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

如您所见,回声是bar baz,不是barbaz。由于要连接传递给现有参数的值,因此需要类似以下内容:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

将上面的行添加到中~/.bashrc,您就可以开始了。


4
您可以使用"$@"代替,"$1"这样也可以传递后续参数。(一般性评论,可能与此处的具体情况无关)
Toby Speight

@TobySpeight D'哦!我应该想到这一点。谢谢,编辑。
terdon

1
@TobySpeight只是为了澄清,是否意味着com uk.conf -something else将转换为sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else
TMH 2015年

4
@TomHart是的。$@包含所有给定的参数。请参阅$ *和$ @有什么区别?
terdon
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.