문자열 명령을 사용하는 dc 및 stdin 또는 heredoc?

문자열 명령을 사용하는 dc 및 stdin 또는 heredoc?

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'

관련 정보