注意:我的shell是csh
一位前同事给了我以下命令,将其放入我的.cshrc
:
alias bastion 'ssh -L \!^\:<some_ip_address> <username>@<something.com>'
请注意,<> 之间的内容是实际值。
现在,当我在 shell 上运行此命令时,出现以下错误:Bad ! arg selector.
我一直在网上搜索 的类似用法,ssh -L
但没有找到使用\!^\
在 前面使用 的语法的示例:
。
知道这个命令实际上想要做什么以及为什么它不起作用吗?
答案1
我自己不是 csh 用户,但这似乎是历史控制。
!^
给出前一个命令的第一个参数。这与 相同!:1
。请记住,正如^
(插入符号) 是正则表达式中的行首锚点 (26.4) 一样,!^
给出了开始历史参数。% cat fn fn1 fn2 ... % more !^ more fn
https://docstore.mik.ua/orelly/unix/upt/ch11_07.htm
\
(我假设)是转义,以防止过早!^
被解释(即不是在定义别名时而是在使用别名时)。查看示例这里。
所以这基本上实现了别名的参数处理。别名旨在使用要绑定的本地端口号来调用。
$ bastion 8080
# should be executed as
$ ssh -L 8080:<some_ip_address> <username>@<something.com>
$ bastion 8080 some argument
# is probably (I'm still no csh user) executed as
$ ssh -L 8080:<some_ip_address> <username>@<something.com> some argument
作为结论,我假设Bad ! arg selector.
意味着没有可供选择的参数,因为您尝试在bastion
没有端口参数的情况下运行它。
1我假设您的替代品<some_ip_address>
实际上是 IP + 端口?不然这个-L
论点就有点奇怪了。