다음과 같은 스크립트에서 "하위 명령"의 출력을 들여쓰려고 합니다.
Turning off image...
Unmounting...done.
Detaching loop device...done
들여쓰기된 항목은 프로세스 중에 수행되는 단계입니다 Turning off image...
.
표준 솔루션은 sed
et를 사용하는 것입니다. 외. 그림이 문제그러나 내 스크립트의 일부 단계에서는 사용자에게 확인 작업을 묻는 메시지를 표시해야 합니다 read
. 프롬프트는 개행 문자로 끝나지 않으므로 sed
명령이 완료될 때까지 출력이 없습니다 read
. 해결책이 있나요?
밝히다:하위 명령 중 하나 자체가 read
프롬프트를 사용하여 호출됩니다. 하위 명령 sed
이 파이프되면 sed
개행 문자로 끝나지 않았기 때문에 프롬프트가 출력되지 않습니다.
다음은 샘플 코드입니다(의미를 강조하기 위해 약간 의도한 것임).
function indent () { (set -o pipefail; "$@" 2>&1 | sed 's/^/ /';); }
function some_cleanup () {
# ... some commands
read -rp "Do you want to force a dismount? (y/n)" yesno
if [ "$yesno" = "yes" ]; then force_dismount; fi
}
indent some_cleanup