这个脚本在做什么?

这个脚本在做什么?
#!/bin/bash

echo 123456789 > out.txt
exec 3<> out.txt
read -n 4 <&3
echo -n 5 >&3
exec 3>&-

面试笔试时,被问到脚本末尾out.txt的内容。我确实在事后运行了脚本,它给了我123456789.但我不知道脚本中发生了什么,尤其是 exec 语句的部分。我查阅了手册页和谷歌搜索结果,exec但找不到任何关于该3<>位的信息。有精通 shell 脚本的人可以解释一下这里发生了什么吗?

答案1

echo 123456789 > out.txt将字符串写入文件123456789中。out.txt

exec 3<>out.txt构造打开文件out.txt进行读写<>并将其附加到文件描述符#3。

read -n 4 <&3读取 4 个字符。

echo -n 5 >&3写入 5(将 5 替换为 5)。

exec 3>&-关闭文件描述符#3。

导致

cat out.txt
123456789

exec关于int 的部分bash(1)指出:

exec [-cl] [-a name] [command [arguments]]如果command指定,它将替换外壳。 [...]如果command未指定,任何重定向都会在当前 shell 中生效 [...]。

相关内容