如何通过SSH传递参数给远程Bash别名/函数
SSH远程执行bash函数参数无法传递的解决办法
你的问题出在bash -ic的参数解析逻辑上:当你执行bash -ic run_it 100时,100会被当作bash进程的位置参数(即$0),而非run_it函数的参数。因为-c选项要求后面紧跟完整的命令字符串,后续参数不会被传递给命令里的函数。
正确的执行方式
- 直接将函数调用与参数包裹为一个字符串传给
-c:
ssh -t <remote-host> bash -ic 'run_it 100'
这样bash会把整个run_it 100当作要执行的命令,100就能正确被run_it函数接收。
- 如果需要传递本地动态参数,可使用双引号让本地shell解析变量后再传递:
local_num=100 ssh -t <remote-host> bash -ic "run_it $local_num"
若参数包含空格、特殊字符,建议用单引号包裹参数或者转义,避免本地shell错误解析。
原命令失效的原因
bash -ic run_it 100中,run_it是-c的命令字符串,100会被设置为bash的$0(交互式shell的默认$0是bash),而run_it函数并没有接收到任何参数,所以$1为空,导致你看不到预期的Hello 100输出。
内容的提问来源于stack exchange,提问作者sureshvv
相关产品推荐
相关产品推荐

