我正在使用以下命令在Bash脚本中打开其他文件描述符:
Reproducer="reproducer.sh"
exec 3<> $Reproducer
然后可以与例如echo
echo "#! /bin/bash" >&3
echo "echo This is a reproducer script." >&3
来源: How do file descriptors work?
正如我在多次尝试后发现的那样,打开的文件将覆盖文件中的现有内容。如果新内容较大,则将扩展文件,但是如果新内容的字节数较少,则旧内容将保留在文件末尾。
在我的情况下,这会创建一个损坏的脚本,因为我正在编写Bash脚本。
exec 3<> file
语句是否可以选择在打开时截断文件?
替代解决方案:
rm $Reproducer
打开之前删除文件。答案 0 :(得分:1)
您可以做的一件事情是创建一个临时文件,并用这个文件替换旧文件。
exec 3<>/tmp/script
printf "%s\n" "#!/bin/bash" >&3
printf "%s\n" "printf \"This is a reproducer script.\n\"" >&3
exec 3>&-
mv /tmp/script "${Reproducer}"
您将实现两件事:
答案 1 :(得分:0)
.as-console-wrapper { max-height: 100% !important; top: 0; }
应该可以工作,除非您需要读取文件。在这种情况下:
exec 3>$Reproducer
然后您从文件描述符4中读取。