내가 뭐하는 거지
echo -n " - This directory is not empty, purge? (Y/N): " | tee -a $mylogs
read choice
echo "$choice" | tee -a $mylogs
하지만 다음과 같이 압축해 보고 싶습니다.
read -p " - This directory is not empty, purge? (Y/N): " choice | tee -a $mylogs
이는 stdout 으로 인쇄되지만 $mylogs
. $choice
왜 이런 일이 발생하는지 설명이 있습니까? 1줄 또는 2줄 대안
- 인쇄 팁
- 사용자 입력 인쇄
- 입력 내용을 다음 위치에 저장하세요.
$choice
스크립트의 이 부분을 기록하고 다시 사용할 수 있기를 원합니다.$choice
답변1
약간의 정보를 읽은 후 알게 되었습니다.이것@lesmana 제공, 도움이 될 수 있음
스크립트를 실행하세요
script -q -a -f logfile -c 'sh ./yourscriptname'
"사용자"로부터 이 로깅을 숨기기 위해 이 스크립트 줄을 대상 스크립트 주위의 래퍼로 넣은 다음 래퍼 내에서 대상 스크립트를 호출하기만 하면 됩니다.
답변2
편집하다: 아무것도 파이프하지 않고도 tee
원시 콘텐츠에서 콘텐츠를 읽을 수 있다는 것을 깨달았으므로 stdin
나중에 이 문제를 우연히 발견하는 사람에게 도움이 될 경우를 대비해 다른 솔루션을 추가하겠다고 생각했습니다.
read -p
인쇄가 stderr
작동하지 않는다는 점을 지적해주신 @steeldriver에게 감사드립니다 stdout
. 내가 얻은 가장 가까운 것은 다음과 같습니다.
read -p " - This directory is not empty, purge? (Y/N): " choice 2> >(tee -a $mylogs)
echo $choice >> $mylogs
무슨 일이 일어나고 있는지에 대한 출처와 설명을 찾을 수 있습니다.여기. 이 특정 예의 경우 첫 번째 줄을 리디렉션하여 프롬프트를 인쇄 stderr
할 수 있습니다.tee
$mylogs
stdout
다만, 사용자 입력을 가로 채서 그냥 으로 대신 read
보내는 것을 불가능하게 만드는 조치가 취해지고 있는 것 같습니다 .$mylogs
$choice
또 다른 솔루션은 더 간단하고 짧지만 사용자 친화적이고 읽기 쉽지 않습니다(많은 사람들이 이것이 read
입력을 그렇게 간단하게 읽는 유일한 명령이 아니라는 것을 알지 않는 한).
echo -n " - This directory is not empty, purge? (Y/N): " | tee -a $mylogs
choice=$(tee -a $mylogs)
따라서 두 번째 줄에서는 tee
사용자 입력을 제공하는 방법을 제공합니다.둘 다 $mylogs
그리고 $choice
는 와 다르지만 read
분명히 그렇지 않습니다.빠르게옵션( -p
). 그래서 여전히 2줄입니다.
또한 제출 하려면 Enter+를 눌러야 합니다 . 이것은 내 Y/N 상황에서는 좋지 않을 수 있지만 +Stop을 누르기 전에 여러 번 누를 수 있으므로 여러 줄 답변에는 좋을 수 있습니다 .CtrlDEnterCtrlD