【问题标题】:Is the syntax for local port forwarding wrong on Zsh?Zsh 上本地端口转发的语法是否错误?
【发布时间】:2022-01-02 03:33:04
【问题描述】:

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

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

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

Bad local forwarding specification '8888ocalhost:8888'

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

【问题讨论】:

    标签: ssh terminal port zsh


    【解决方案1】:

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

    ssh -N -f -L ${1}:localhost:$2 rgr6291@klc0201.ci.northwestern.edu
    

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      相关资源
      最近更新 更多