如何将bash命令的输出存储在变量中?

这个问题在这里已经有了答案:

  • 如何将变量设置为Bash中命令的输出? 13个答案

  • PROCESS=$(echo "$LINE" | awk '{print $2}')
    

    要么

    PROCESS=$(ps aux | grep "$1" | awk '{print $2}')
    

    我不知道你为什么得到你引用的错误。 我无法复制它。 当你这样说的时候:

    PROCESS=$LINE | awk '{print $2}'
    

    该shell将其扩展为如下所示:

    PROCESS='mayoff  10732 ...' | awk '{print $2}'
    

    (我已经缩短了$LINE的价值,使这个例子可读。)

    流水线的第一个子命令设置变量PROCESS ; 这个变量设置命令没有输出,所以awk立即读取EOF并不打印任何内容。 而且,由于在子shell管道运行的每个子,的设置PROCESS只发生在一个子shell,而不是在运行该脚本的母贝,所以PROCESS还是不能设置为在脚本以后的命令。

    (请注意,某些版本的bash可以在当前shell而不是子shell中运行管道的最后一个子命令,但这不会影响此示例。)

    除了在subshel​​l中设置PROCESS并且没有向awk输入任何内容外,您想要将LINE的值提供给awk ,并将结果存储在当前shell的PROCESS中。 所以你需要运行一个命令,将LINE的值写入其标准输出,并将该标准输出连接到awk的标准输入。 echo命令可以做到这一点(或者chepner在他的回答中指出的printf命令)。


    您需要使用echo (或printf )将$LINE的值实际放置到awk命令的标准输入中。

    LINE=$(ps aux | grep "$1")
    PROCESS=$(echo "$LINE" | awk '{print $2}')
    echo $PROCESS
    kill -9 $PROCESS
    

    没有必要使用LINE ; 你可以用一行来设置PROCESS

    PROCESS=$(ps aux | grep "$1" | awk '{print $2}')
    

    或更好,跳过grep

    PROCESS=$(ps aux | awk -v pname="$1" '$1 ~ pname {print $2}')
    

    最后,不要使用kill -9 ; 这是调试错误程序的最后手段。 对于你自己编写的任何程序, kill "$PROCESS"就足够了。

    链接地址: http://www.djcxy.com/p/57201.html

    上一篇: How do i store the output of a bash command in a variable?

    下一篇: Store value to variable in Shell script