" exec not found"在exec中使用变量时

时间:2015-06-21 04:09:15

标签: linux shell

我遇到了一个奇怪的问题。

mkfifo "spch2008"
exec 100<>"spch2008"

没关系。但是,当我使用变量替换&#34; 100&#34;时,会发生错误。

exec:100:未找到

PIPE_ID=100
mkfifo "spch2008"
exec ${PIPE_ID}<>"spch2008"

我不知道原因。拜托我,谢谢。

2 个答案:

答案 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
$