如何在bash脚本命令中传递选项?

时间:2015-07-27 16:56:43

标签: bash

我的脚本以:

开头
#!/usr/bin/sudo bash

它执行非即时处理并且不打算中断,因此我想在输入密码后将-b选项添加到sudo以在后台中运行它

#!/usr/bin/sudo -b bash

但是,脚本不接受该选项。难道我做错了什么 ?甚至可以通过这种方式选择吗?如果没有,为什么?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

让我们问shellcheck

$ shellcheck yourscript 

In yourscript line 1:
#!/usr/bin/sudo -b bash
^-- SC2096: On most OS, shebangs can only specify a single parameter.

一个公平的解决方法是让脚本根据标志使用sudo调用自身:

#!/bin/bash
if [[ $1 == "-n" ]]
then
  echo "Processing as $(whoami)"
else
  printf "Option -n not specified: invoking sudo -b %q -n:" "$0"
  exec sudo -b "$0" -n
fi

这样做的另一个好处是可以直接运行yourscript -n来不调用sudo而不是在后台运行。这允许像sudo yourscript -n && mail -s "Processing complete" you@example.com这样的东西,如果脚本无条件地自我背景,这是不可能的。

警告:sudo "$0"不是重新调用当前脚本的防弹方式。