我创建了一个名为" com"的文件。内容
章*
然后我尝试将以下命令运行到bash:
ls< COM
据我了解,shell将接受输入 章节* 来自文件" com"并将它放在ls旁边,结果是这样的:
ls Chapter *
现在,此命令应列出以' Chapter'开头的所有文件。但它会打印当前目录中的所有文件。
以下命令
也会发生这种情况cat< list_of_filenames_to_give_input_to_cat_command
让list_of_filenames_to_give_input_to_cat_command'包含以下内容:
quicksort.c
mergesort.c
radixsort.c
这应该打印上述每个文件的内容。相反,它只是打印文件的名称,如下所示:
quicksort.c
mergesort.c
radixsort.c
任何帮助表示赞赏!感谢。
答案 0 :(得分:1)
试试这个:
ls $(<com)
与许多其他标准的un * x命令一样, /bin/ls
使用命令行参数,而不是 STDIN 。
你可以写:
ls $(cat com)
bash允许使用语法:$(&lt; filename)并且比$(cat ...)或cat com
更快地工作,因为它是内置的(没有分叉)。
使用STDIN传递参数
执行此操作有一个命令xargs
:
xargs /bin/ls <com
但这不适用于通配符(*
)。
echo $(<com) | xargs ls
答案 1 :(得分:1)
ls不会从标准输入读取其参数,而是从命令行读取。
你可以这样做:
ls -l $(cat com)
答案 2 :(得分:1)
据我所知,shell将从文件&#34; com&#34;中获取输入章*。并将它放在ls旁边
不,那不是它的意思。
ls < com
相当于
cat com | ls
由于ls
没有读取它的标准输入,因此忽略来自com
的数据。正如另一个答案所提到的那样,通过使用:
ls $(<com)
答案 3 :(得分:0)
另一种方法:
ls `cat com`
和
cat `cat list_of_filenames_to_give_input_to_cat_command`
在主命令之前shell会评估(执行)在反引号之间键入的所有内容,并且该命令将使用该执行的输出,就像您在命令中的那个位置键入该输出一样线。
- 从rozcietrzewiacz回答What does ` (backquote/backtick) mean in bash?
说明您未获得预期结果的原因如下:
并非所有命令都从标准输入读取。常见Unix的示例 从未从标准输入读取的命令:
ls, cp, mv, date, who, pwd, echo, cd
除上述
cp
外,所有上述命令都有共同之处 他们从不打开任何文件阅读的事实。 如果命令永远不会 从任何文件中读取任何数据,它无法从标准输入读取任何数据。...
如果(并且仅当!)命令从标准输入读取,则重定向 标准输入将使程序从您附加的任何内容中读取 标准输入。