Shell

dc和標準輸入還是帶有字元串命令的heredoc?

  • April 6, 2021

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等待輸入)

?從標準輸入獲取輸入,這是這裡的文件。您需要將腳本提供給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
)

或者取消 here-document 和對(通常)外部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'

引用自:https://unix.stackexchange.com/questions/643774