bash命令在控制台中运行,但不在脚本中运行

时间:2018-10-20 00:17:22

标签: bash grep cygwin

我有一个bash脚本,该脚本本质上是针对文件运行计算的grep命令:

cat $myfile | $string

其中myfile是单词和字符串的列表,是带有参数的grep命令:

/usr/bin/grep -v  -e b -e j -e k -e l -e m -e q -e v -e x

grep参数是在脚本的前面通过另一个进程计算的 当我从控制台运行命令cat $myfile | $string时,将获得预期的输出。 当命令从脚本运行时,我得到:

./sp2: line 126: /usr/bin/grep -v  -e b -e j -e k -e l -e m -e q -e v -e x : No such file or directory

这是通过cygwin运行的,确实在几年前就起作用了。现在...不多。

如果有人对这个问题是什么以及如何解决这个问题有任何想法,我将不胜感激。

干杯!

3 个答案:

答案 0 :(得分:1)

您可以尝试将其添加到之前的行中吗?

echo "cat $myfile | $string"

(让我们看看它在做什么)

从上一命令获取打印输出后,还可以将其更改为egrep,并在手动添加的脚本中查看其功能吗?

egrep -v "(b|j|k|l|m|q|v|x)" "${myfile}"

(类似这样)

答案 1 :(得分:0)

当我同时尝试shbash时,这对我来说很好用。我怀疑您的问题是脚本文件实际上包含cat $myfile | "$string"而不是cat $myfile | $string。前者会将$ string的内容视为单个令牌,而不用空格隔开,这将完全导致您所看到的行为。

答案 2 :(得分:0)

如果这似乎不是其他人所建议的报价问题,那么您使用Cygwin的原因是否具体?

如果使用Windows 10,则它具有非常好的本机linux子系统,比Cygwin更好。除非这对您不是可行的方法,否则我会先花点时间再花很多时间研究可能对Cygwin特有的。