Zsh 上本地端口转发的语法是否错误?

Is the syntax for local port forwarding wrong on Zsh?

我正在尝试在我的 .zshrc 文件上设置一个函数,以创建一种简单的方法来进行本地端口转发。我的目标是在我大学的集群上启动一个 Jupyter 服务器,然后使用本地端口转发来访问它。我的 .zshrc 文件中有以下内容:

function jptt(){
    # Forwards port  into port  and listens to it
    ssh -N -f -L :localhost: rgr6291@klc0201.ci.northwestern.edu
}

但是,每当我尝试使用它时,例如 jptt 8888 8888,我都会收到以下错误:

Bad local forwarding specification '8888ocalhost:8888'

我是否以错误的方式处理字符串或参数?我不明白为什么它无法执行命令。提前致谢!

zsh中,您可以将历史风格的扩展运算符添加到变量扩展的末尾。 :localhost 被视为扩展 :l,后跟文本 localhost。为防止这种解释,请使用显式大括号来分隔参数扩展。

ssh -N -f -L :localhost: rgr6291@klc0201.ci.northwestern.edu

您还可以引用参数扩展以在句法上将 : 与扩展分开:

ssh -N -f -L "":localhost: rgr6291@klc0201.ci.northwestern.edu

:l,顺便说一句,导致扩展被转换为小写。例如,

% x=FOO
% echo $x
FOO
% echo $x:l
foo

使用大括号,运算符会进入大括号内,紧跟在参数名称之后。

% echo ${x}:l
FOO:l
% echo ${x:l}
foo