我已经编写了一个脚本来查找系统上运行的当前进程及其项目名称。但是在执行脚本后我得到太多的行,状态代码= 0作为输出。任何人都可以帮助我这个我是新的编写脚本。
#!/bin/bash
dsjob -lprojects >ProjectName.txt #Fetching the datastage project name running on the server
ps -ef | grep DSD.RUN | cut -d" " -f21 > Currentjoblog.txt #this will contains the current running job on the server
for i in $(< ProjectName.txt);do
dsjob -ljobs $i > $i.txt
for j in $(< $i.txt);do
cat $Currentjoblog.txt | while read LINE
do
if [ x$j == x$LINE ] ;then
echo "$i-------$LINE"
fi
done <"$CurrentJoblog.txt"
done
done
答案 0 :(得分:2)
首先,您不需要使用临时文件:
dsjob -lprojects|while read l1; do
dsjob -ljobs $l1|while read l2; do
# you could use $l2 here
# ...
done
done
以下是关于如何使用Bash中的循环读取命令输出或文件内容的提醒:here
否则:
cat $Currentjoblog.txt | while read LINE do # ... done <"$CurrentJoblog.txt"
这种语法错了。您要么读取cat
的输出,要么通过重定向读取文件内容,而不是两者都读取(请参阅我之前的链接以获得正确的语法)。
否则:
if [ x$j == x$LINE ] ;then # ... fi
当您使用命令test
或[
语法而不是[[
时,您必须使用双引号保护变量。我还认为前面操作数的x
是错误;)
以下是关于使用双引号保护变量的必要性(或不是)的提示:here。
答案 1 :(得分:0)