【问题标题】:Add seconds option to positional parameters in bash将秒选项添加到 bash 中的位置参数
【发布时间】:2014-08-27 13:27:02
【问题描述】:

您好,我正在编写一个具有一些位置参数的 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

谢谢

【问题讨论】:

    标签: linux bash shell parameters case


    【解决方案1】:

    看起来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 或其他无限期运行的命令来测试脚本是否在指定的秒数后退出。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 请在帖子中添加相关信息,并使用链接作为唯一来源。
      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多