远程执行本地Shell脚本并向本地文件写入内容的问题求助
解决本地脚本在远程执行并写入本地文件的问题
我懂你遇到的困扰了——想让远程服务器上运行的脚本往本地的output.txt写内容,但直接传本地路径肯定行不通,毕竟远程机器根本访问不到你本地的文件系统呀!
先拆解下你原来命令的问题:ssh user@host "bash -s" < script.sh /path/to/output.txt里的/path/to/output.txt是作为本地ssh命令的参数,根本没传给远程的bash -s。就算传过去了,远程机器也找不到这个本地路径,自然写不进去。
下面给你两种可行的解决方案:
方案1:修改脚本,让远程输出到标准输出,本地再追加到文件
把你的script.sh改成直接输出内容到标准输出,不用写文件:
#!/bin/sh echo "hello from remote server"
然后运行这个命令,远程的输出会通过ssh通道传回本地,追加到你的output.txt:
ssh user@host "bash -s" < script.sh >> /path/to/output.txt
方案2:不修改脚本,给远程传一个特殊的"文件参数"
如果你不想改动原脚本,那可以把远程的标准输出作为参数传给脚本,这样脚本里的>> $file就会把内容输出到远程的stdout,再由ssh传回来本地写入文件:
ssh user@host "bash -s /dev/stdout" < script.sh >> /path/to/output.txt
这里/dev/stdout是远程机器上的标准输出设备,脚本往这个"文件"写内容,其实就是输出到远程的终端(也就是ssh的通道),本地再把这个内容追加到output.txt里。
核心逻辑补充
本质上,远程服务器没法直接操作你的本地文件,必须把需要写入的内容通过ssh的标准输出通道传回本地,再由本地的shell负责把内容追加到output.txt中。
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

