zsh自定义ssh端口转发函数报Bad local forwarding错误如何修复
问题原因
报错是zsh内置的变量修饰符语法导致的解析歧义:
zsh支持$变量名:修饰符的语法,其中:l修饰符的作用是将变量值转换为全小写。你写的原函数中,$2后面直接跟了:l(来自localhost的开头字符),zsh会把$2:l识别为「取$2的值并转小写」,不会把:l当成普通字符串处理,因此拼接后的端口转发参数丢失了:l部分,才会出现报错里的localhost:9999ocalhost:7777异常内容。
修复方案
给函数中的变量添加{}包裹,明确变量的边界,避免zsh将后续字符误识别为变量修饰符即可:
function access_cluster(){ ssh -N -f -L localhost:${2}:localhost:${1} [cluster name] }
生效操作
修改完.zshrc文件后,执行以下命令让配置生效,再运行自定义命令即可正常使用:
source ~/.zshrc
提示:后续编写zsh自定义脚本、函数时,只要变量后面需要紧跟其他非空白字符,都建议用
${变量名}的格式明确变量边界,避免出现同类解析歧义问题。
内容的提问来源于stack exchange,提问作者Biomathnerd
相关产品推荐
相关产品推荐

