Bash脚本之谜,我到底做了什么?

时间:2011-12-30 18:43:21

标签: bash

我刚刚完成了我的第一个工作bash脚本(yay) - 它将数据提供给OS X上的GeekTools并显示一个任务列表,每次定期更新时会显示一个新的项目类别。

我写了函数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

1 个答案:

答案 0 :(得分:0)

这有帮助吗?

  

当事情没有按计划进行时,你需要确定什么   确切地导致脚本失败。

     

Bash提供了广泛的调试功能。

     

最常见的是使用-x选项启动子shell,其中   将以调试模式运行整个脚本。

     

每个命令的跟踪及其参数都打印到标准   在扩展命令之后但在它们出现之前输出   执行。

bash -x script1.sh

否则:Google help for bash debugging