考虑这个非常简单的bash脚本:
#!/bin/bash
cat > /tmp/file
Run Code Online (Sandbox Code Playgroud)
它将管道中的任何内容重定向到文件中.例如
echo "hello" | script.sh
Run Code Online (Sandbox Code Playgroud)
并且"hello"将位于文件/ tmp/file中.这有效...但似乎应该有一个本地bash方式这样做而不使用"猫".但我无法弄明白.
注意:
它必须在脚本中.我想让脚本在之后对文件内容进行操作.
它必须在一个文件中,在我的情况下,后面的步骤涉及一个只从文件中读取的工具.
我已经有了一个非常好的方法 - 它只是看起来像一个黑客.有原生方式吗?像"/ tmp/file <0"或"0>/tmp/file".我认为bash会有一个原生语法来做到这一点......
小智 20
你可以干脆做
cp /dev/stdin myfile.txt
Run Code Online (Sandbox Code Playgroud)
使用Ctrl + D或Ctrl + Z和中提琴终止输入!您使用stdin中的文本创建了文件.
echo "$(</dev/stdin)" > /tmp/file
Run Code Online (Sandbox Code Playgroud)
用ENTERctrl+ 终止你的输入d
我不认为有一个内置函数可以从 stdin 读取直到 EOF,但你可以这样做:
#!/bin/bash
exec > /tmp/file
while IFS= read -r line; do
printf '%s\n' "$line"
done
Run Code Online (Sandbox Code Playgroud)