仅在shell中第一次执行特定命令

b4qexyjb  于 6个月前  发布在  Shell
关注(0)|答案(4)|浏览(89)

我有剧本。
我只需要在第一次尝试在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

这不正常。如果我哪里说错了,请纠正我。

qlfbtfca

qlfbtfca1#

您可能应该检查可能的脚本执行的 * 效果 *,而不仅仅是它已经运行的事实。例如,它是否构建任何东西?如果是,请检查预期输出。
否则,如果任何操作失败,只需创建一个带有touch $HOME/.some_hidden_file的标志文件并检查其是否存在。
在UNIX中,设置变量不是持久性的。

emeijp43

emeijp432#

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

  • csh/tcsh:setenv MYVARIABLE something
  • bash:export MYVARIABLE="something"

然后使用if子句检查变量是否已设置。如果是,执行其他操作,如果不是,则这是第一次执行脚本。

bwntbbo3

bwntbbo33#

我不知道上下文,但也许你可以在最后从脚本中删除可执行权限:

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

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

46qrfjad

46qrfjad4#

运行一次,它打印一个两个。再运行一次,它只打印了两个。

#!/usr/bin/bash

if [ ! -f ONCE.txt]
then
    echo one
    touch ONCE.txt
fi
echo two

如其他人所提到的,检测仅一次操作是否已成功执行一次将理想地取决于由该操作产生的差异。它可以是一个文件,或目录,或一个无害的安装命令,可以运行来区分。

相关问题