Shell脚本路径不起作用,但可以在shell行上运行

时间:2016-05-26 01:05:24

标签: bash shell

因此我想访问的脚本和文件都是直接相同的(root)。我能做到

cat flist

它打印得很好。但如果我打电话给#34; cat flist"在脚本(或任何其他文件)中,它不会起作用。他们都是根。任何想法如何解决这个问题?

enter image description here

此外,

grep -w "asd" doc.data
sort -k2,2n doc.data
head -5 doc.data

这会打印3个不同的报告。我首先想要它,用asd这个词来获取所有内容,然后排序,打印到前5个。如何更改它以实现此目的?

1 个答案:

答案 0 :(得分:1)

脚本正在运行的用户可能没有根目录(即'/')作为其$ PATH的一部分。这意味着,为了引用根目录中的文件,必须为其指定绝对路径名。在根目录的情况下,这只是意味着在斜杠前面,这样'scriptname'就变成了'/ scriptname'

值得注意的是,大多数Linux帐户的默认设置都不包括路径中的当前目录,就像Windows一样。这意味着必须使用绝对路径从另一个脚本执行脚本 - 即使它们都位于同一个位置。 (出于安全考虑,这被视为一件好事,或者我理解这一点。)

如果我误解了我道歉的问题,但我希望这会有所帮助。

编辑:至于第二部分,以你想要的方式组合命令,这是我最喜欢的命令shell之一,它说明了基于Linux的shell通常被认为更多的原因之一比Windows上通常可用的功能更全面。您可以使用所谓的管道将一个命令的输出发送到另一个命令的输入。为此,您将命令与管道或竖线,字符组合 - '|'在这种情况下,请尝试:

grep -w "asd" doc.data | sort -k2,2n | head -5

命令sorthead都是管道兼容的(大多数本机命令都是有意义的)。这意味着它们使用“标准输入”(STDIN)和“标准输出”(STDOUT)。默认情况下,STDOUT将打印到屏幕上。但这就是管道角色的作用 - 它将STDOUT发送到下一个命令的STDIN。希望这是有道理的,并且很有用。试一试!