【问题标题】:How to use for loops in command prompt in csh shell -- looking for decent one liners如何在 csh shell 的命令提示符下使用 for 循环——寻找体面的一个内衬
【发布时间】:2009-10-09 14:55:48
【问题描述】:

来自 bash shell,我错过了一个简单的循环滚动(for i in (...); do ... done;)

你会在 cshell 中发布典型的单行循环吗?

请单行,而不是多行 谢谢

【问题讨论】:

    标签: shell csh tcsh


    【解决方案1】:

    csh 手册页指出:

    foreach、switch 和 while 语句以及 if 语句的 if-then-else 形式要求主要关键字出现在输入行上的单个简单命令中,如下所示。

    foreach 和 end 必须单独出现在不同的行上。

    else 和 endif 必须出现在输入行的开头; if 必须单独出现在其输入行或 else 之后。

    while 和 end 必须单独出现在它们的输入行上。

    【讨论】:

    【解决方案2】:

    哇,我已经好几年没有写过csh 脚本了。但比尔·乔伊确实是自己写的,我想这值得一些怀旧的努力......

    set t=(*)
    foreach i ($t)
      echo $i >> /tmp/z
    end
    

    或者只是foreach i (*)

    这种循环结构可以很好地与 csh 的 单词列表 的内置概念配合使用。这有点存在于 bash 中,但不存在于 vanilla posix shell 中。

    set q=(how now brown cow)
    echo $q[2]
    

    foreach 循环巧妙地遍历此数据结构。

    【讨论】:

    • 更新: 好的,好的,好吧,我不知道如何在 csh 中进行单行循环。 csh 语法以不同方式处理 ; 和换行符。它不是单行友好的。
    【解决方案3】:

    我会说我已经以某种方式修复了它,尽管有 csh 选项,所以你可以做这样的事情:

    printf "while ( 1 ) \n ps -aux|grep httpd \n echo 'just a new row' \n  sleep 2 \n end" | csh -f
    

    【讨论】:

      【解决方案4】:

      我努力让 CSH shell 轻松循环并运行相同的命令。

      正如这个答案所指出的:https://stackoverflow.com/a/1548355/1897481

      让我放弃了制作oneliner的工作。

      最终决定使用以下别名在循环中运行带有参数*的命令:

          # while_cmd_w_sleep <SLEEP-TIME> <CMD + ARGS>
          alias while_cmd_w_sleep '(echo '\''while (1)\n\!:2*\necho =================\necho Sleeping for \!:1.\nsleep \!:1\necho =================\nend'\'') | tcsh'
      
          # for_n_cmd <LOOP_COUNT> <CMD + ARGS>
          alias for_n_cmd         '(echo '\''foreach x (`seq \!:1`)\necho =================\necho Iteration \[$x]\necho =================\n\!:2*\nend'\'') | tcsh'
      
          # for_n_cmd_w_sleep <LOOP_COUNT> <SLEEP-TIME> <CMD + ARGS>
          alias for_n_cmd_w_sleep '(echo '\''foreach x (`seq \!:1`)\necho =================\necho Iteration \[$x]\necho =================\n\!:3*\necho =================\necho Sleeping for \!:2.\nsleep \!:2\nend'\'') | tcsh'
      

      示例输出:

          $> for_n_cmd 3 echo hi
          =================
          Iteration [1]
          =================
          hi
          =================
          Iteration [2]
          =================
          hi
          =================
          Iteration [3]
          =================
          hi
      

      while 循环:

          $> while_cmd_w_sleep 2s echo hello there
          hello there
          =================
          Sleeping for 2s.
          =================
          hello there
          =================
          Sleeping for 2s.
          =================
          hello there
          =================
          Sleeping for 2s.
          ^C
      

      * 多个命令循环运行的示例:

          $> for_n_cmd 3 'echo hi\\nsleep 2s\\necho done waiting'
          =================
          Iteration [1]
          =================
          hi
          done waiting
          =================
          Iteration [2]
          =================
          hi
          done waiting
          =================
          Iteration [3]
          =================
          hi
          done waiting
      

      在此示例中,三个命令 echo hisleep 2secho done waiting 正在循环中运行。

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 2014-11-23
        • 1970-01-01
        相关资源
        最近更新 更多