2017-06-05 93 views
-2

我有一個腳本調用另一個腳本,但腳本的輸出似乎是錯誤的。下面是我的代碼:Ubuntu bash腳本輸出正確的值 - 一個腳本調用另一個腳本


print_output.sh

#!/bin/bash 
echo $1 
total=$(eval $1 | awk '{sum+=$1} END {print sum}') 
echo "Total is $total" 

try.sh

#!/bin/bash 
./print_output.sh "ssh $1 'cd /somelocation/logs; cat data-$1.txt' | grep ..." 

Usuage is: ./try.sh ukdry-01 

我期望的輸出是:

uk 

以及在這種情況下的「總計爲11」。但輸出顯示爲「cat data.txt」。

我哪裏去錯了?正如我期望的輸入是「ukdry-01」。 「cat data.txt」是一個從print_output.sh開始評估(即eval $ 1)並在腳本中執行的命令。

data.txt中包含例如

1 AUTH 
2 AND 
8 BOOLEAN 

的想法是,總的被打印。該腳本將ssh發送給輸入到主機名的用戶,即ukdry-01,通過cat進入data-ukdry-01.txt,然後註銷並對所發現的數據執行grep。數據被過濾到print_output.sh中,它們都是整數,並打印出第一列。該usuage必須是腳本的名稱即./try.sh ukdry-01,其中在內部調用./print_output然後SSH命令等

+1

在發佈的代碼中沒有任何'eval $ 1'。用實際的代碼重寫你的問題會更好,否則我們可能會解決錯誤的問題。 – janos

+0

它確實看起來像它正在做的事情,你告訴它。字符串「cat data.txt」是進入'print_output.sh'的'$ 1'。所以這就是'回聲'。 – Jack

+1

請注意'try.sh'腳本沒有使用它的任何參數,因此它只能通過巧合輸出與其第一個位置參數相同的字符串。 –

回答

0

下面是出了什麼工作對我來說:

try.sh 
#!/bin/bash 
./print_output.sh [email protected] "ssh $1 'cd /somelocation/logs; cat data-$1.txt' | grep ..." 

Usuage is: ./try.sh ukdry-01 

$ @複製位置參數,我可以使用ukdry-01作爲$ 1。

相關問題