此问题的关键值与使用dash-symbol“ - ”重定向stdin流有关。
我在下一段代码中有基本的测试脚本:
#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...
在这种情况下,哪一个shell命令可以模拟用户输入?
谢谢。
答案 0 :(得分:1)
根据定义,管道cmd1 | cmd2
将cmd1
的标准输出文件描述符连接为cmd2
的标准输入文件描述符。
echo foo | file -
这个特殊的例子几乎没用; file
命令对于在管道中运行的那种短暂数据运行没有多大意义。一个更有用的示例在文件上运行file
。如果您绝对希望文件是标准输入,则可以使用简单的输入重定向。
file - </path/to/example/file
或者你可能正在寻找这个:
file $(locate example/file)
其中locate
是一个命令示例,它打印您可能需要的文件的完整路径作为file
的实际输入参数。
答案 1 :(得分:1)
您可能需要here document:
#!/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;您可以选择任何您喜欢的名称(经常使用!
)。标记词周围的引号表示不会对此文档进行shell扩展,因此最后一行不会被shell扩展。如果缺少引号(如<<EOF
中所示),则会发生shell扩展。这在您需要时非常有用。