【问题标题】:What does the left angle bracket after a while loop mean in bash?while循环后的左尖括号在bash中意味着什么?
【发布时间】:2016-03-07 19:23:40
【问题描述】:

以下内容来自 RHEL 上的 /etc/init.d/functions。当我遇到这个 while 循环时,我试图弄清楚 __pids_var_run() 函数做了什么。

            while : ; do
                    read line
                    [ -z "$line" ] && break
                    for p in $line ; do
                            if [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] ; then
                                    if [ -n "$binary" ] ; then
                                            local b=$(readlink /proc/$p/exe | sed -e 's/\s*(deleted)$//')
                                            [ "$b" != "$binary" ] && continue
                                    fi
                                    pid="$pid $p"
                            fi
                    done
            done < "$pid_file"

有人能解释一下while : ; do ; ... done &lt; "$pid_file" 的作用吗?更具体地说,done 之后的最后一部分,因为它的其余部分或多或少是有意义的。

【问题讨论】:

  • 跟任何命令后的意思是一样的。

标签: bash loops


【解决方案1】:

这意味着循环中任何从标准输入读取内容的命令都将从给定文件中读取(例如,而不是键盘)。

特别是在这种情况下,循环使用read line 从标准输入读取单行,因此当您从$pidfile 重定向时,它有效地逐行读取文件。

要进一步了解重定向,这里有一个Illustrated redirection tutorial,由this Bash Guide LhunathGreyCat 推荐。

【讨论】:

  • In 表示从文件中获取标准输入。它与键盘完全没有关系。通常,stdin 与键盘相关联,但将两者混为一谈是错误的。
  • 当然,我不知道在什么层面解释它。
  • 从技术上讲,它为while 复合命令本身指定标准输入,主体中的任何命令都从该标准输入继承其自己的标准输入。
  • 不仅是循环内的programs,还有shell builtins(即read
【解决方案2】:

我看到这个问题已经回答了(我无法发表评论,因为我做了赏金),但我认为你应该在有机会时查看这个网站:

http://mywiki.wooledge.org/BashFAQ/001

这个家伙(或女孩)真的通过示例深入了解正确和不正确的语法。

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2017-02-13
    • 2021-11-26
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多