zsh - 向 .zshrc 添加函数会更改命令

标签 zsh

我将以下函数添加到我的 .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/

相关文章:

customization - 根据当前文件夹更改 Powerlevel9k 段

bash - 如何将此 bash 补全函数转换为 zsh 补全函数?

zsh - 从 zsh 自动完成中删除文件

zsh - 在 shell 中启动交互式命令时 Enter 不起作用

emacs - 在emacs的sh模式下打开zsh脚本

node.js - zsh:找不到命令:即使在我全局安装了express和express-generator之后也是如此

linux - linux shell 管道是流水线吗?

linux - 从命令行打开文件时使 vim 遵循符号链接(symbolic link)

shell - ZSH:从使用相同名称的 zsh 函数调用内置函数