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