2011-12-30 69 views
0

我剛剛完成編寫我的第一個工作bash腳本(yay) - 它將數據提供給OS X上的GeekTools,並顯示一個任務列表,每次更新時會定期顯示一個新的項目類別。Bash腳本之謎,我在這裏做了什麼?

我寫了函數getProject,在腳本中調用它作爲一次測試,然後寫了一行實際發送信息的行。這是奇怪的部分 - 當我拿出我嚴格作爲測試進行的函數調用時 - 腳本停止工作!任何人都可以告訴我爲什麼這是,我怎麼能解決它?

此外,由於這是我的第一個腳本,如果有人願意,我會很樂意提供更好的編碼方法的建議。謝謝!

更新:我刪除的行是「getProject」它被添加到測試函數,當我刪除它時,我得到了......沒有,沒有任何結果。

#!/bin/bash 

function getProject 
{ 

PATH=/usr/local/bin:$PATH 
cd $TMPDIR 

if [ ! $STRING ]; then 
    declare -ag STRING 
    declare -g STRLENGTH 
    STRING=($(task ssproject | sort -fbdiu | grep -iv project | grep -iv tasks)) 
    STRLENGTH=$(task stats | awk '/Projects/ {print $2}') 
    STRLENGTH=$(($STRLENGTH-1)); 
fi 

if [ ! -f ./projectcycle.txt ] || [ $(cat ./projectcycle.txt) -gt $STRLENGTH ] || [ $(cat ./projectcycle.txt) -lt 0 ]]; then 
    echo 0 > ./projectcycle.txt 
fi 

if [ ! $CYCLE ]; then 
    declare -g CYCLE 
    CYCLE=$(cat ./projectcycle.txt) 
fi 

if [[ $CYCLE -lt 0 || $CYCLE -gt $STRLENGTH ]]; then 
    CYCLE=0 
fi 

echo ${STRING[ $CYCLE ]} 
CYCLE=$((CYCLE+1)) 
echo $CYCLE > ./projectcycle.txt 
} 
getProject # <-------REMOVING BROKE THE SCRIPT 

task projectdisplay project:$(getProject) | grep -v task 
+2

你能更新你的問題,使其清楚你拿出什麼新的結果? – 2011-12-30 18:59:15

+0

只是爲了確認,它是驅動整個過程的最後一個ilne,即'task projectdisplay project:$(getProject)| grep -v task'並且你期待函數通過嵌入的調用'... $(getProject)...'來工作? (這似乎對我來說)祝你好運。 – shellter 2012-01-01 05:18:15

回答

0

這能幫助嗎?

當事情沒有按照計劃進行時,您需要確定究竟是什麼導致腳本失敗。

Bash提供了廣泛的調試功能。

最常見的是使用-x選項啓動子shell,其中 將以調試模式運行整個腳本。

執行命令擴展後但在執行 之前,將每個命令的跟蹤及其參數打印到標準的 輸出。

bash -x script1.sh 

否則:Google help for bash debugging