cta*_*ac_ 4 shell here-document dc
dc可以从文件或/和标准输入中读取命令。
如果我想打印用户输入:
cat essai_dc
[enter a number : ]
n
?
p
dc essai_dc
enter a number : 4
4
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试使用heredoc:
dc <<EOF
> [enter a number : ]
> n
> ?
> p
> EOF
enter a number : dc: stack empty
Run Code Online (Sandbox Code Playgroud)
我对标准输入也一样:
cat essai_dc | dc
enter a number : dc: stack empty
Run Code Online (Sandbox Code Playgroud)
命令 ?获取p并执行它,但堆栈为空。
是否有可能让它工作(告诉dc等待输入)
?从标准输入获取其输入,这是此处的文档here。您需要将脚本提供给dc使用不同的文件描述符。在带有 的系统上/dev/fd/n,这可能是:
dc /dev/fd/3 3<< 'EOF'
[enter a number : ]
n
?
p
EOF
Run Code Online (Sandbox Code Playgroud)
或者您可以使用 ksh 样式的进程替换(通常/dev/fd/n在下面使用):
dc <(cat << 'EOF'
[enter a number : ]
n
?
p
EOF
)
Run Code Online (Sandbox Code Playgroud)
或者取消 here-document 和对(通常)外部cat实用程序的调用:
dc <(printf %s \
'[enter a number : ]
n
?
p
'
)
Run Code Online (Sandbox Code Playgroud)
dc像 GNUdc这样的一些实现允许将dc脚本的内容作为参数传递给-e,因此您可以使用命令替换:
dc -e "$(cat << 'EOF'
[enter a number : ]
n
?
p
EOF
)"
Run Code Online (Sandbox Code Playgroud)
或者直接:
dc -e '[enter a number : ]
n
?
p'
Run Code Online (Sandbox Code Playgroud)