2011-12-30 9 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

あなたはあなたの質問を更新してもらえますか? –

+0

確認するには、プロセス全体を駆動するのは最後のilneです。つまり、 'task projectdisplay project:$(getProject)| grep -v task'そして、組み込み呼び出し '... $(getProject)...'を介して関数が動作することを期待していますか? (それは私には正しいようです)幸運。 – shellter

答えて

0

これは役に立ちますか?

計画通りに実行されない場合は、 が原因でスクリプトが失敗する原因を特定する必要があります。

Bashには、豊富なデバッグ機能があります。

最も一般的なのは、-xオプションを使用してサブシェルを起動することです。 は、スクリプト全体をデバッグモードで実行します。

各コマンドのトレースとその引数は、コマンドが展開されてから が実行される前に標準 出力に出力されます。

そうでない場合は
bash -x script1.sh 

:あなたが出したものを、新たな結果が何であったかは明らかであるようにGoogle help for bash debugging

関連する問題