在bash中为位置参数添加秒选项

时间:2014-07-07 06:29:24

标签: linux bash shell parameters case

您好我正在编写一个包含一些位置参数的bash代码,但是最好的方法是添加一个可选的秒参数,这将允许某些函数运行x秒? 这是代码的样子:

doaction()
{
(run a process)
}

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

x秒后杀死进程。 当我运行脚本时会发生什么     ./script -s 10 -a 代替     ./script -a -s 10

由于

2 个答案:

答案 0 :(得分:0)

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

对于你的第二个问题,你当前写的东西的方式,如果你使用./script -a -s 10,那么结果将是在设置延迟之前动作将运行。您可以通过使用标志来指示应该执行操作来解决此问题,并且可以确保在执行之前设置超时(如果有的话)。

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

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或其他无限运行的其他内容替换脚本来测试脚本在指定的秒数后退出。

答案 1 :(得分:0)

您可以使用“getopts”来解决您的问题。您可能会发现information on this link对您的方案有用。