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

如何通过Bash脚本在SFTP会话中执行cd等命令

解决方案

以下是几种可直接落地的实现方式,可根据你的使用场景选择:

方法1:使用Here文档内嵌命令(最推荐,无需额外文件)

直接把要在SFTP会话内执行的命令放在<<EOF和EOF之间即可,后续要新增其他SFTP命令直接在EOF块内新增即可,修改后的脚本示例:

#!/bin/bash
# 参数说明:$1为SFTP用户名 $2为SFTP服务器地址 $3为要进入的目标目录(也可硬编码固定路径)
sftp "$1@$2" << EOF
cd $3
# 后续需要执行的其他SFTP命令直接写在下方即可,例如:
# put 本地文件名
# get 远程文件名
# ls
EOF

如果你的SFTP命令包含特殊字符、或者不希望外层Bash提前解析块内的变量,可以给EOF加单引号,禁用父shell的提前解析逻辑:

#!/bin/bash
sftp "$1@$2" << 'EOF'
cd /固定的目标目录路径
# 此处的$符号会被SFTP会话直接处理,不会被外层Bash解析
put *.log
EOF

方法2:使用批处理文件(适合命令多、需要复用的场景)

先把所有要执行的SFTP命令写入独立的批处理文件,例如sftp_cmds.txt:

cd /目标目录
put 本地文件.txt
get 远程文件.txt
bye

然后在Bash脚本中通过sftp的-b参数指定该批处理文件即可:

#!/bin/bash
sftp -b sftp_cmds.txt "$1@$2"

补充提示:如果已经配置了SSH密钥免密登录,可添加-oBatchMode=yes参数禁用交互式密码提示,避免自动化执行时脚本卡住。

内容的提问来源于stack exchange,提问作者tinykeYboard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:05