我有剧本。
我只需要在第一次尝试在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
这不正常。如果我哪里说错了,请纠正我。
4条答案
按热度按时间qlfbtfca1#
您可能应该检查可能的脚本执行的 * 效果 *,而不仅仅是它已经运行的事实。例如,它是否构建任何东西?如果是,请检查预期输出。
否则,如果任何操作失败,只需创建一个带有
touch $HOME/.some_hidden_file
的标志文件并检查其是否存在。在UNIX中,设置变量不是持久性的。
emeijp432#
您可以在第一次运行脚本时设置环境变量:
setenv MYVARIABLE something
export MYVARIABLE="something"
然后使用if子句检查变量是否已设置。如果是,执行其他操作,如果不是,则这是第一次执行脚本。
bwntbbo33#
我不知道上下文,但也许你可以在最后从脚本中删除可执行权限:
然后,直到你再次
chmod a+x <scriptname>
,你将无法执行它。你会得到“拒绝许可”。备注:
在这种情况下,您可以将脚本拆分为always.sh和firstonly.sh。在firstonly.sh和always.sh中使用
chmod a-x $0
:或者,您可以使用其他答案中建议的某种标志文件。
46qrfjad4#
运行一次,它打印一个两个。再运行一次,它只打印了两个。
如其他人所提到的,检测仅一次操作是否已成功执行一次将理想地取决于由该操作产生的差异。它可以是一个文件,或目录,或一个无害的安装命令,可以运行来区分。