我将以下函数添加到我的 .zshrc
function jptt(){
# Forwards port $1 into port $2 and listens to it
ssh -N -f -L localhost:$2:localhost:$1 remoteuser@remotehost
}
然后我正在运行jptt 1 2
并出现以下错误:
Bad local forwarding specification
localhost:2ocalhost:1
奇怪的是我在2
之后丢失了:l
当我尝试用简单的行替换命令并且它起作用时,该函数正在工作。我还单独运行了 ssh 命令,效果很好。
最佳答案
表达式$x:l
应用小写modifier到您的 x
变量。下面的例子说明了这一点:
pax> x=ABC
pax> echo $x:lnnn
abcnnn
pax> echo ${x}:lnnn
ABC:lnnn
第一部分为您提供小写变体,因此修饰符不被视为输出字符串的一部分。第二部分展示了如何通过使用大括号来防止这种变量扩展,以确保 :l
不被视为修饰符。在您的具体情况下,这可以通过以下行完成:
ssh -N -f -L localhost:${2}:localhost:${1} remoteuser@remotehost
养成尽可能多地支撑参数名称的习惯实际上是个好主意,因为在其他情况下这可能会对您产生不利影响。
关于zsh - 向 .zshrc 添加函数会更改命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64437063/