我正在尝试运行 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 手册页后,我得到了这个技巧。
感谢大家的帮助