1

这个问题的关键值与使用破折号“-”来重定向标准输入流有关。

我在下一个代码中有基本的测试脚本:

#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...

在这种情况下,哪一个 shell 命令可以模拟用户输入?

谢谢你。

4

2 回答 2

1

根据定义,管道cmd1 | cmd2将 的标准输出文件描述符连接cmd1为 的标准输入文件描述符cmd2

echo foo | file -

这个特殊的例子几乎没有用;该file命令在管道内的那种临时数据上运行没有多大意义。一个更有用的示例运行file在一个文件上。如果您绝对希望文件成为标准输入,则可以通过简单的输入重定向来做到这一点。

file - </path/to/example/file

或者你可能正在寻找这个:

file $(locate example/file)

其中locate是一个命令示例,该命令打印您可能想要的文件的完整路径作为file.

于 2013-01-07T16:05:45.657 回答
1

您可能想要一个此处的文档

#!/bin/bash
# This causes the shell to await user input.
file - <<'EOF'
This is what the user
might have typed
if it wasn't in a here document.
${BASH:=head} $(ls | wc -l)
EOF

此处文档继续到仅包含标记词的行。在示例中,标记词是 EOF;你可以选择任何你喜欢的名字(!经常使用)。标记词周围的引号意味着不会对here文档进行shell扩展,因此最后一行不会被shell扩展。如果(如 )中缺少引号,<<EOF则会发生 shell 扩展。这在您需要时很有用。

于 2013-01-07T16:11:05.647 回答