管道未在文件的read命令中解释

时间:2013-01-19 08:54:30

标签: bash shell pipe

我正在尝试编写用于服务器运行状况检查的shell脚本。 要使用的命令位于单独的文件中,作为命令行参数传递给脚本 该文件逐行读取。 我的剧本是:

#!/bin/bash
set -x   # DEBUG MODE
FILENAME=$1
count=0
echo "Executing commands on `hostname`"
echo "The commands output can be found in /tmp/`hostname`_hc.txt"
echo "########### `hostname` ############ " > /tmp/`hostname`_hc.txt
while IFS= read COMMAND
do
let count++ 
echo >> /tmp/`hostname`_hc.txt  
echo "###################################################################" >> /tmp/`hostname`_hc.txt
echo "###################################################################" >> /tmp/`hostname`_hc.txt    
echo "$count : $COMMAND" >> /tmp/`hostname`_hc.txt
$COMMAND >> /tmp/`hostname`_hc.txt
echo "####################################################################" >> /tmp/`hostname`_hc.txt
echo "####################################################################" >> /tmp/`hostname`_hc.txt
echo >> /tmp/`hostname`_hc.txt
done < $FILENAME
echo "Commands executed on `hostname` " 

我的示例服务器运行状况检查命令是:

df -ak
vmstat 5 5
ls -lrt /opt/config/ | grep -i ss7
prtdiag -v 
ps -ef | grep ss7
swap -s
dmesg| grep "`date +%b %d`" | grep "swap space limit exceeded"
dmesg|grep -i ECC

当我执行此脚本时,我为“|”的命令收到这些错误使用管道:

ls -lrt /opt/config/ | grep -i ss7

ls: cannot access |: No such file or directory
ls: cannot access grep: No such file or directory
ls: cannot access ss7: No such file or directory

同样,对于ps -ef | grep ss7,我收到此错误消息

ERROR: Garbage option.
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy

1 个答案:

答案 0 :(得分:2)

可能需要改变

$COMMAND >> /tmp/`hostname`_hc.txt

eval $COMMAND >> /tmp/`hostname`_hc.txt