Linux 向bash中的位置参数添加秒选项

Linux 向bash中的位置参数添加秒选项,linux,bash,shell,parameters,case,Linux,Bash,Shell,Parameters,Case,您好,我正在编写一个bash代码,其中包含一些位置参数,但是添加一个可选的seconds参数(允许某些函数运行x秒)的最佳方法是什么? 这是代码的外观: doaction() { (run a process) } while [ $# -gt -0 ]; do case "$1" in --action|-a) doaction ;; --seconds|-s) ???????? $2 shift ;; esac shift done x秒后,

您好,我正在编写一个bash代码,其中包含一些位置参数,但是添加一个可选的seconds参数(允许某些函数运行x秒)的最佳方法是什么? 这是代码的外观:

doaction()
{
(run a process)
}

while [ $# -gt -0 ]; do
  case "$1" in
  --action|-a)
     doaction ;;
  --seconds|-s)
     ???????? $2
     shift ;;
  esac
shift
done
x秒后,终止进程。 当我像这样运行脚本时会发生什么 /脚本-s10-a 而不是 /脚本-a-s 10

谢谢

看起来这个命令在这里可能很有用。但是,这只适用于与当前运行的脚本不同的脚本(据我所知)

对于第二个问题,即您当前编写内容的方式,如果您使用
/script-a-s10
,则结果是操作将在设置延迟之前运行。您可以通过使用标志指示应该执行操作来修复此问题,并且可以确保在执行之前设置超时(如果有)

以下是我对可能的解决方案的建议:

while [ $# -gt -0 ]; do
    case "$1" in
    --action|-a)
        action=true;;
    --seconds|-s)
        time="$2"
        shift;;
    esac;
    shift
done

if $action; then
    timeout $time /path/to/action.sh
else
    # do something else
fi

其中
/path/to/action.sh
是要在特定时间内运行的脚本的位置。通过使用bash命令
top
或其他无限期运行的命令替换脚本,可以测试脚本是否在指定的秒数后退出

您可以使用“getopts”来解决您的问题。您可能会发现该链接对您的场景很有用。

请在帖子中添加相关信息,并将该链接用作唯一的来源。