Bash不同意我的管道,拒绝执行完整的命令

时间:2013-04-01 03:25:16

标签: bash

到目前为止,这是我的代码:

#! /bin/bash

Options=("1" "2" "3")
select opt in "${Options[@]}"
do
  case "$REPLY" in
     1)
        who=$(whoami)
        echo -e "you are: $who"
        ;;
     2)
        var=$(uptime | awk '{print $3}' | cut -d, -f 1)
        echo $var
        ;;
     3) break;;
     *) echo "Invalid input";;
  esac
done

它不起作用。第一个选项工作得很好。然而,第二个没有。

进一步测试表明bash不喜欢管道,输出只是“#”,这表明它只是命令的awk部分实际执行。该命令在shell中运行良好(它报告它仅在线时间)。

2 个答案:

答案 0 :(得分:2)

这一行没有任何意义:

var=$(uptime | awk '{print 3}' | -d, -f 1)

awk语句应为

awk '{print $3}'

并且cut语句应为

cut -d ',' -f 1

说实话,您可能根本不需要awk语句来表达您想要做的事情。只需将uptime传送到上面的cut语句。

var=$(uptime | cut -d ',' -f 1)

答案 1 :(得分:0)

当您使用Windows / Dos中的文本文件并在unix中重复使用时,会发生这种情况。

每个相应OS中的线路终结器是不同的。 HTH

P.S。当您在vi / vim中打开文本文件时,您会注意到行尾的^ M.

  

不起作用说“cut:invalid byte or field list” - user2230627 Apr 1 at 3:34