2014-01-17 44 views
0

我已經編寫了一個腳本來找出當前正在系統上運行的進程以及它們的項目名稱。但是在執行腳本之後,得到狀態代碼= 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

測試字符串'X $ VAR = xstring'是隻在非常老的shell中需要,這很可能不會識別'=='的有效性(它們通常在'test'(又名'''命令要求'=')的系統上運行。 –

回答

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[ syntaxe代替[[。我也認爲前面的操作數是x是錯誤的;)

這裏提醒您需要(或不是)用雙引號保護變量:here

0

也許你想使用pgrep「查找或信號流程基礎上的姓名和其他」

例如:使用成語

$> pgrep $(dsjob -lprojects)