SSH连接并切换目录的Bash脚本报错,咨询修改方法
解决Bash脚本中SSH后CD命令失效的问题
问题本质
你碰到的这个错误其实是个很常见的脚本误区:脚本里的ssh "$login@$server"和后面的cd "/home/admin/web/"是完全独立的本地执行命令。当ssh命令运行时,它会打开一个远程的交互式shell,但这个shell和脚本里后续的cd不在同一个环境里——等你退出远程shell后,脚本才会在本地执行cd命令,本地当然没有远程服务器上的/home/admin/web/路径,所以报错。
修正后的完整脚本
把cd命令作为远程执行的参数传递给ssh,让它在远程shell中运行:
#!/bin/bash set -o errexit # 通用参数 server="some_server" login="admin" default_path="/home/admin/web/" html_folder="/public_html" # 项目参数 project_folder="project_name" go_to_folder() { # 切换到目标目录后启动交互式shell,保持会话 ssh "$login@$server" "cd $default_path && exec \$SHELL" } go_to_folder
关键细节解释
cd $default_path && exec $SHELL:先在远程服务器上切换到指定目录,然后执行exec $SHELL启动一个新的交互式shell,这样你登录远程后就直接处于目标目录下了- 如果只是想在远程执行命令后退出,不需要保持交互式会话,可以直接写成
ssh "$login@$server" "cd $default_path && 你的后续命令" - 用预先定义的
$default_path变量代替硬编码路径,让脚本更易维护和修改
内容的提问来源于stack exchange,提问作者malcoauri
相关产品推荐
相关产品推荐

