마운트 해제: 대상이 변수로 인해 사용 중입니다.

마운트 해제: 대상이 변수로 인해 사용 중입니다.

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"

관련 정보