【问题标题】:Unable to cat a data file into a script file (bash) on terminal command line [duplicate]无法在终端命令行上将数据文件编入脚本文件(bash)[重复]
【发布时间】:2019-12-23 16:51:52
【问题描述】:

我是 bash 新手,我无法使用 bash 在终端上 cat 文件和使用管道命令。

这是我在终端命令行上尝试过的

$ cat data | readlooptest

但是,当我使用管道时,我总是会收到此消息 |

-bash: readlooptest: command not found

我有一个名为 readlooptest 的脚本和一个数据文件

readlooptest 的脚本内容

#!/bin/bash
read myLine
sum=0
for i in $myLine
do
    sum=`expr $sum + $i`
done
echo "sum is: $sum"

数据文件内容为

6 4 4 7 7 

所以一旦在终端输入命令,输出应该是

$ chmod +x readlooptest
$ cat data | readlooptest
sum is : 28

但是我得到了

-bash: readlooptest: command not found

【问题讨论】:

    标签: bash macos unix command-line terminal


    【解决方案1】:

    这与管道或cat 无关。实际的问题是您需要指定 where readlooptest 是,因为它不在您的 PATH 中。如果它在工作目录中,只需在开头添加./

    $ cat data | ./readlooptest
    

    【讨论】:

      【解决方案2】:

      如果readlooptest 未安装在您的$PATH 目录之一中,则必须提供运行它的路径。

      所以对于你的管道cat,如果你是cdreadlooptest 在同一目录中:

      cat data | ./readlooptest
      

      【讨论】:

      • 你可能要提到cat在这里是不必要的(参见./readlooptest < data
      • 确实如此,但是有很多东西要提到,比如过时的反引号和 expr 的使用,我认为海报是在一本旧书上学习的。没什么大不了的,一旦解决了路径中找不到的命令等基本问题,将有很多机会欣赏优化和更现代的结构。
      • 它通常被称为 UUOc(不必要地使用 cat)。有助于让他们知道他们是否使用cat 来处理除了将两个文件连接在一起(或将一个短文件转储到stdout 以查看内容)之外的任何东西,那么他们对cat 的使用可能是一个 UUOc :)
      • @LéaGris 确实:UUOc(借用大卫的话:)不是学习 Bash 时遇到的唯一陷阱!无论如何,这让我认为提及关于 POSIX 和 Bash shell 脚本的非常好的参考可能很有用:mywiki.wooledge.org(如果我几年前被告知的话:)
      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 2016-03-15
      • 2022-01-01
      • 2015-05-05
      • 2017-10-28
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多