仅在shell中首次执行特定命令

时间:2011-07-29 11:11:39

标签: linux shell

我有一个脚本 我只是在第一次尝试在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

这不能正常工作。如果我错了,请纠正我。

3 个答案:

答案 0 :(得分:2)

您可以在第一次运行脚本时设置环境变量:

  • csh / tcsh:setenv MYVARIABLE something
  • bash: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

或者,您可以使用其他答案中建议的某种标记文件。