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

Linux RHEL 8远程SSH执行cat命令无输出及变量回传问题

SSH远程执行脚本问题解答

问题1:远程执行cat命令无输出的解决方法

你的脚本中cat命令实际已在远程执行,但仅将结果赋值给远程变量FILE_CONTENT,未将内容输出到SSH通道,因此本地终端看不到输出;添加cat "\$FILE" > output.txt后生成空文件,大概率是here-doc的变量解析问题或路径权限问题,以下是正确实现方式:

让本地看到cat输出的写法

修改远程执行部分,直接输出文件内容,或把变量内容echo出来:

#!/bin/bash
SERVER=$1
USER=$2
PATH1="/mypath"
FILE="myfile"
ssh $USER@$SERVER << 'EOF'
cd "/mypath"
DATE_SUFFIX="$(date +%Y%m%d)"
cp "myfile" "myfile_$DATE_SUFFIX"
# 直接输出文件内容到本地终端
cat "myfile"
# 或赋值后输出变量内容
FILE_CONTENT="$(cat "myfile")"
echo "$FILE_CONTENT"
EOF

注意:使用<< 'EOF'替代<< EOF,可避免本地shell解析远程脚本中的变量,确保所有命令完全在远程执行。

远程生成含内容的output.txt的正确写法

若要在远程生成包含文件内容的output.txt,需确保路径正确且权限足够:

ssh $USER@$SERVER << 'EOF'
cd "/mypath"
cat "myfile" > output.txt
EOF

若文件仍为空,检查远程/mypath/myfile是否存在、是否有读取权限,以及output.txt所在目录是否有写入权限。

问题2:将远程变量传回本地的方法

把远程服务器的变量值传回本地,核心思路是让远程输出变量内容,本地通过命令替换捕获该输出:

方法1:捕获远程文件内容到本地变量

#!/bin/bash
SERVER=$1
USER=$2
PATH1="/mypath"
FILE="myfile"

# 捕获远程文件内容到本地变量
FILE_CONTENT=$(ssh $USER@$SERVER << 'EOF'
cd "/mypath"
cat "myfile"
EOF
)

# 本地使用变量
echo "$FILE_CONTENT"

方法2:捕获远程自定义变量到本地

比如获取远程的DATE_SUFFIX变量:

#!/bin/bash
SERVER=$1
USER=$2

DATE_SUFFIX=$(ssh $USER@$SERVER << 'EOF'
DATE_SUFFIX="$(date +%Y%m%d)"
# 输出变量值供本地捕获
echo "$DATE_SUFFIX"
EOF
)

# 本地使用远程传回的变量
echo "$DATE_SUFFIX"

注意事项

  • 始终用<< 'EOF'包裹远程执行的脚本,避免本地shell意外解析远程变量。
  • 若远程输出包含特殊字符(如换行、空格),本地捕获时需用双引号包裹变量,防止内容被分割。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:27:37