/bin/bash 复制代码

/bin/bash 复制代码

我正在尝试运行 while 循环并通过 ssh 读取:

#!/bin/bash

ssh [email protected] "cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c \"%Y %n\" "$path"  >> /tmp/fs_10.10.10.10.log done"

但问题是我的变量 $path 在我的本地主机上解析,而我想在远程主机上解析它,以便它可以读取远程主机上的文件并获取“rm_filesystem.log”中列出的所有文件夹/文件的统计信息

答案1

或者将 ssh 命令行放在单引号中而不是双引号中。然后命令将按原样传递,而无需在本地进行任何替换。即

ssh [email protected] 'cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c "%Y %n" "$path"  >> /tmp/fs_10.10.10.10.log done'

答案2

ssh 用户@主机“bash -s”< yourscript.sh

目前的情况是,脚本正在本地机器上解析,然后将其完整发送到远程机器。因此,当它到达那里时,$PATH 变量已经被您的本地 $PATH 值替换。

上面的例子做的是在你的远程机器上打开一个 bash 会话,并将 bash 设置为从 stdin 读取(参见http://www.gnu.org/software/bash/manual/bashref.html#Invoking-Bash

然后传入脚本(已输入到外部文件中),以便它直接在远程计算机上执行。

这样,就不需要本地解析脚本,也就不需要替换环境变量。

答案3

我让它以应有的方式正常工作:

/bin/bash 复制代码

远程控制[电子邮件保护]“cat /var/log/syncer/rm_filesystem.log | 读取路径时;执行 stat -c '%Y“%n”'“\”'$path'\”>> /tmp/fs_10.10.10.10.log 完成”

阅读完 bash 手册页后,我得到了这个技巧。

感谢大家的帮助

相关内容