我遇到了一个奇怪的问题。
mkfifo "spch2008"
exec 100<>"spch2008"
没关系。但是,当我使用变量替换&#34; 100&#34;时,会发生错误。
exec:100:未找到
PIPE_ID=100
mkfifo "spch2008"
exec ${PIPE_ID}<>"spch2008"
我不知道原因。拜托我,谢谢。
答案 0 :(得分:3)
它是由shell在重定向运算符的左侧不执行变量扩展引起的。您可以使用解决方法:
eval exec "${PIPE_ID}"'<>"spch2008"'
它会强制shell进行变量扩展,生成
eval exec 100'<>"spch2008"'
然后eval
内置的命令会将命令提供给shell,这将有效地执行
exec 100<>"spch2008"
答案 1 :(得分:0)
I / O重定向通常不允许变量指定文件描述符,而不仅仅是<>
重定向的上下文。
考虑:
$ cat > errmsg # Create script
echo "$@" >&2 # Echo arguments to standard error
$ chmod +x errmsg # Make it executable
$ x=2
$ ./errmsg Hi # Writing on standard error
Hi
$ ./errmsg Hi ${x}>&1 # Writing on standard error
Hi 2
$ ./errmsg Hi 2>&1 # Redirect standard error to standard output
Hi
$ ./errmsg Hi 2>/dev/null # Standard error to /dev/null
$ ./errmsg Hi ${x}>/dev/null # Standard output to /dev/null
Hi 2
$