将stdout和stdin重定向到文件

0 bash stdin stdout

我可以写一个文件并从中读取:

echo a > b.txt
read c < b.txt
Run Code Online (Sandbox Code Playgroud)

Bash是否能够隐含地这样做?就像是:

<turn on implicit mode>
echo a
read c
<turn off implicit mode>
Run Code Online (Sandbox Code Playgroud)

当"隐式模式"打开时,所有stdout都转到b.txt,所有stdin都b.txt读取.我试过了:

exec > b.txt
Run Code Online (Sandbox Code Playgroud)

但它只影响标准输出.

Bar*_*mar 5

您可以使用exec同时重定向stdin和stdout

exec > b.txt < b.txt
echo a
read c
Run Code Online (Sandbox Code Playgroud)

我不确定这是否会读到它写的内容,但我测试了它并且它有效.

您可以通过复制其他FD中的原始FD来还原它,然后在完成后还原它们.

exec 10<&0 11>&1 > b.txt < b.txt
echo a
read c
exec <&10 10<&- >&11 11>&-
echo $c
Run Code Online (Sandbox Code Playgroud)