【问题标题】:How to sleep for 1 second between each xargs command?如何在每个 xargs 命令之间休眠 1 秒?
【发布时间】:2013-02-15 16:32:12
【问题描述】:

例如,如果我执行

ps aux | awk '{print $1}' | xargs -I {} echo {}

我想让 shell 在每个 echo 之间休眠 1 秒。

如何更改我的 shell 命令?

【问题讨论】:

    标签: linux bash shell xargs


    【解决方案1】:

    您可以使用以下语法:

    ps aux | awk '{print $1}' | xargs -I % sh -c '{ echo %; sleep 1; }'
    

    请注意空格和分号。在括号之间的每个命令之后,都需要分号(即使在最后一个之后)。

    【讨论】:

    • 如果我需要在内壳中使用一些 $VARIABLE 怎么办?它默认不继承它。
    • 我认为它确实继承了它。例如:'export a=abc' 然后使用 'echo $a %' 而不是 'echo %'。
    • 一位同事向我指出,您可以将一个 xargs 调用通过管道传输到另一个调用中,如果您有一个在单引号之间放置的命令比较棘手:psql -c "select foo from bar" | xargs -I % sh -c '{ echo %; sleep 1; }' | xargs -L1 -I {} curl -X POST -H "Content-Type: application/json" -d '{ "code": "123", "foo": "{}" }' "https://myapi.com/baz"
    • 当我尝试这个时,我只是在每一行打印了一堆 %s。 (如果有帮助,在 Mac OS X 上)
    【解决方案2】:

    echo 替换为一些名为sleepecho 的shell 脚本,其中包含

     #!/bin/sh
     sleep 1
     echo $*
    

    【讨论】:

      【解决方案3】:

      如果您的awk 支持它:

      ps aux | awk '{ system("sleep 1"); print $1 }' | xargs -I {} echo {}q
      

      或完全跳过awkxargs

      ps aux | while read -r user rest;
          echo $user
          sleep 1;
      done
      

      【讨论】:

        猜你喜欢
        • 2019-01-24
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多