USB가 사용 중인지 확인하고 결과를 변수에 저장하고 싶습니다.
$ foo=$(umount /dev/sdb1)
$ umount: /path/mounted: target is busy.
하지만 인쇄하고 싶을 때 $foo
빈 변수가 나타납니다.
$ echo $foo
$
나의 궁극적인 목표는 USB를 제거하는 것입니다. 대상이 사용 중인 경우 사용자에게 경고하는 데 사용됩니다 whiptail
. 그래서:
$ [[ -z $foo ]] || whiptail --msbox "Cancel the operation that is maintaining your USB busy" 0 0
target is busy
오류를 변수에 저장할 수 있습니까? 아니면 다른 기술을 사용해야 합니까?
답변1
프로그램은 일반적으로 "표준 오류" I/O 스트림(약칭: "stderr")에 오류 메시지를 씁니다. 해당 용어를 검색하면 수백만 개의 결과를 얻을 수 있습니다. 간단히 설명하자면 stderr이 존재하므로 "표준 출력"("stdout")이 리디렉션될 때 다음과 같이 오류 메시지가 화면에 표시될 수 있다는 것입니다. 가상의 명령
umount /dev/sdb1 > um.result.txt
변수에 캡처하려고 해도 오류 메시지가 화면에 나타나는 것을 볼 수 있습니다.
똑같이 짧은 대답은 다음을 사용하여 2>&1
stderr 스트림을 stdout 스트림으로 병합하는 것 입니다.
foo=$(umount /dev/sdb1 2>&1)
오류 메시지는 변수에 캡처됩니다.
또 다른 방법,Jordan이 의견에서 제안한 것처럼, 종료 상태를 확인하는 것입니다. 이 주제에 대한 변형은 다음과 같습니다.
/dev/sdb1 제거 || 사용자에게 불만을 제기하세요.
만약에! /dev/sdb1 마운트 해제 그 다음에 사용자에게 불만을 제기하세요. 필리핀 제도
umount /dev/sdb1 2> /dev/null || 사용자에게 불만을 제기하세요.
foo=$(umount /dev/sdb1 2>&1) || 사용자에게 불만을 제기하세요.사용"$foo"