我正在嘗試制作一個腳本來測驗程式,但我需要對檔案描述符和重定向使用一些黑魔法。
但問題是我正在嘗試使用exec file_descriptor > &-來關閉它,但腳本拋出錯誤這里是代碼和錯誤:
for fd in "${fds[@]}"; do
echo "Closing fd $fd and remove pipes"
exec $fd<&-
rm -f pipe$fd
done
并且 fd 是這樣創建/存盤的:
pfd=25 #I start the file descriptors to 25 because my program open some file descriptors
fds=()
mkfifo pipe$pfd
exec $pfd>pipe$pfd
fds =$pfd
pfd=$((( $pfd 1 )))
錯誤是
exec: 25: not found
我不知道為什么,但是 exec 不想與變數一起執行,當我洗掉變數并輸入數字時,它可以作業。但我需要放置變數,所以我不知道如何解決這個問題。
uj5u.com熱心網友回復:
正確的語法是:
exec {fd}<&-
請注意,這需要 bash 4.1 或更高版本;早期版本無法在不使用eval.
也就是說,考慮讓 bash 自動分配所有描述符編號,并將它們與管道編號分開。
pipe_names=( )
pipe_fds=( )
pipe_num=0
newpipe() {
local pfd_new pipe_name="pipe${pipe_num}"
mkfifo "$pipe_name" || return
exec {pfd_new}>"$pipe_name" || return
pipe_fds[$pipe_num]=$pfd_new
pipe_names[$pipe_num]=$pipe_name
(( pipe_num ))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487319.html
