在工作中做一个简单的脚本,我不明白为什么它不会在另一个文件中输出结果。bash ssh脚本不会输出结果到文件
/tmp/system
存储节点列表
#!/bin/bash
$results=restest.txt
for i in $(cat /tmp/system); do
ping -c 1 $i
if [ $i = 0 ]; then
ssh $i ps -ef | grep ops | echo > $results
fi
done
在工作中做一个简单的脚本,我不明白为什么它不会在另一个文件中输出结果。bash ssh脚本不会输出结果到文件
/tmp/system
存储节点列表
#!/bin/bash
$results=restest.txt
for i in $(cat /tmp/system); do
ping -c 1 $i
if [ $i = 0 ]; then
ssh $i ps -ef | grep ops | echo > $results
fi
done
回波不从标准输入打印而是它的参数(或换行符如果无参数)。所以
echo file.txt
只打印'file.txt',而不是文件的内容。因此,您的代码只能将新行写入该文件。您可以使用cat打印标准输入到标准输出,但在这里它是无用的,因为你可以管grep的直接输出到文件:
ssh $i ps -ef | grep ops > $results
首先感谢您对编辑的代码(是这样的:)更清晰 我有2点或3个建议:
当你想存储变量不使用“$” symbole,这symbole用于获取变量的值前值
1:
MYVAR=3 echo MYVAR "this will print MYVAR" echo $MYVAR "this will print 3"
2-总是给你的价值观,特别是如果该值从另一个命令
3-要解决你的脚本,你需要引用远程机器上执行命令正在添加,然后 将输出重定向到文件
例如:
ssh [email protected] "ls > file.txt" "file.txt is created on machineA" ssh [email protected] "ls" > file.txt "file.txt is created on YOUR machine"
如此简单,你CA通过
ssh $i "ps -ef | grep ops" > $results
尝试ñ取代你的最后一行在您的测试bash classictest
好运
有几个错误使用-ne。首先,不要像这样迭代文件。其次,i
是主机的名称,而不是退出状态ping
。第三,echo
是不必要的(并且不从标准输入中读取)。最后,$
仅用于扩展参数,不分配给它。
#!/bin/bash
results=restest.txt
while read -r host; do
if ping -c 1 "$host"; then
ssh "$host" ps -ef | grep ops > "$results"
fi
done < /tmp/system
是的我试过,以及只是为了涵盖每个角度,仍然无法正常工作。谢谢您的帮助! – 2014-10-17 10:37:05
“echo”在这里并不是很有用,但这并不完全正确,如果你想在远程机器上执行come命令并得到你应该引用命令的输出 – bachN 2014-10-17 10:46:27