-bash:ls:没有这样的文件或目录

时间:2016-10-31 22:09:11

标签: bash shell

我制作了一个程序,它充当shell并用于测试目的,我尝试使用<运算符,但在我的bash中收到此错误

目的是将ls作为输入并在我的模拟shell中运行它

我收到此错误的具体原因是否可以来自我的代码?

我的程序名称是rshell:

[xx@xx rshell]$ ./bin/rshell < ls
bash: ls: No such file or directory

2 个答案:

答案 0 :(得分:1)

输入重定向运算符<的右侧需要文件名。所以shell将你的例子中的“ls”解释为文件名。您收到错误,因为没有此类文件。

如果要将ls的输出传递给shell,请使用管道:

ls | ./bin/rshell

流程替换

./bin/rshell < <(ls)

如果要将标准输入上的文本“ls”传递给shell,请使用here-string:

./bin/rshell <<< ls

答案 1 :(得分:0)

您拥有的语法./bin/rshell < ls,意味着&#34;从名为&#39; ls&#39;&#34;的文件中读取。

如果您尝试将ls 命令的输出发送到/ bin / rshell,则需要使用管道对其进行管道传输:

ls | ./bin/rshell

或从匿名文件句柄中读取:

./bin/rshell < <(ls)

基本上,><用于处理文件(文件i / o),|是你想要处理从一个命令到另一个命令的输出(命令) I / O);但是,您可以使用<(command)语法将这两者与匿名文件句柄结合起来。

在shell脚本中,您可以做更好的事情,例如将命令的输出存储在字符串变量中,然后使用该字符串作为输入,解析它以及各种有趣的东西。首先是第一件事。

用于学习所有内容bash的优秀资源是Advanced Bash-Scripting Guide:http://www.tldp.org/LDP/abs/html/index.html