You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:05:45