我有一个脚本 我只是在第一次尝试在shell中运行此脚本时才需要执行特定命令。否则,不应执行它,其余命令应该完成。
我该如何实现?欢迎所有指针。
谢谢,
森
这是我试图实现的代码:
start_time=`date +%s`
echo $script_instance
if [ `echo $script_instance` == true ]; then
end_time=`date +%s`
echo '#########################################################################'
echo '# Build Date : '`date`
echo '# Compilation time : '`expr $end_time - $start_time` s
echo '#########################################################################'
else
echo '-------------------------------------------------------------------------'
echo 'Updating the APIs'
echo '-------------------------------------------------------------------------'
fi
script_instance=true
export $script_instance
这不能正常工作。如果我错了,请纠正我。
答案 0 :(得分:2)
您可以在第一次运行脚本时设置环境变量:
setenv MYVARIABLE something
export MYVARIABLE="something"
如果设置了变量,则使用if子句进行检查。如果是这样,那么做其他的东西,如果没有,那么这是第一次执行脚本。
答案 1 :(得分:2)
您应该检查可能的脚本执行的效果,而不仅仅是它已经运行的事实。 例如,它构建了什么?如果是,请检查预期的输出。
否则,如果有任何失败,只需创建一个包含touch $HOME/.some_hidden_file
的标记文件并检查其是否存在。
在UNIX中设置变量不是持久的。
答案 2 :(得分:1)
我不知道上下文,但也许您可以在最后从脚本中删除可执行权限:
chmod a-x $0
然后,再次chmod a+x <scriptname>
,您将无法执行它。您将获得“权限被拒绝”。
评论后注意:
在这种情况下,您可以将脚本拆分为always.sh和firstonly.sh。在firstonly.sh和always.sh中使用chmod a-x $0
:
[ -x firstonly.sh ] && ./firstonly.sh
或者,您可以使用其他答案中建议的某种标记文件。