这个问题的关键值与使用破折号“-”来重定向标准输入流有关。
我在下一个代码中有基本的测试脚本:
#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...
在这种情况下,哪一个 shell 命令可以模拟用户输入?
谢谢你。
根据定义,管道cmd1 | cmd2
将 的标准输出文件描述符连接cmd1
为 的标准输入文件描述符cmd2
。
echo foo | file -
这个特殊的例子几乎没有用;该file
命令在管道内的那种临时数据上运行没有多大意义。一个更有用的示例运行file
在一个文件上。如果您绝对希望文件成为标准输入,则可以通过简单的输入重定向来做到这一点。
file - </path/to/example/file
或者你可能正在寻找这个:
file $(locate example/file)
其中locate
是一个命令示例,该命令打印您可能想要的文件的完整路径作为file
.
您可能想要一个此处的文档:
#!/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 扩展。这在您需要时很有用。