x-terminal-emulator 명령 및 bash OR 논리

x-terminal-emulator 명령 및 bash OR 논리

시도 중인 일부 bash OR 논리 명령에서 이상한 현상이 발생했습니다. 일반적으로 모든 것이 잘 작동합니다.

/bin/bash -c "gnome-terminal || notify-send 'ERROR'"

그러면 gnome-terminal 실행을 시도한 다음 첫 번째 명령이 실패한 경우에만 두 번째 부분을 실행합니다. 예를 들어 "gnome-terminal"이 설치되지 않은 경우(또는 실패를 유발하기 위해 고의로 "XXXXgnome-terminal"로 변경한 경우) "notify-send" 오류가 표시됩니다. 그러나 그렇지 않은 경우 "||" 다음의 두 번째 명령은 다음과 같습니다. 첫 번째 명령이 성공했기 때문에 실행되지 않습니다.

그러나 이는 다르게 작동합니다.

/bin/bash -c "x-terminal-emulator || gnome-terminal || notify-send 'ERROR'"

이렇게 하면 터미널 창( 에 의해 호출됨)이 표시되고 x-terminal-emulator해당 터미널 창을 닫으면 다음 명령이 진행되어 두 번째 터미널 창( gnome-terminal로직 부분에 의해 호출됨)이 표시됩니다.

x-terminal-emulator는 기본 터미널을 가리키는 심볼릭 링크라는 것을 알고 있습니다. 그러나 이는 bash OR 논리가 성공하더라도 "실패"했다고 믿게 만드는 것 같습니다.

$(x-terminal-emulator)x-terminal-emulator 명령(예: 또는 ) 을 래핑하는 몇 가지 다른 방법을 시도하여 $(which x-terminal-emulator)OR 논리에 "성공" 상태를 보다 성공적으로 제공하여 명령 이후의 명령이 실행되지 않도록 했습니다. 그러나 지금까지 아무것도 효과가 없었습니다.

아이디어?

코드의 요점은 다음과 같습니다.

  1. gnome-terminal과 다른 경우를 대비하여 사용자의 기본 터미널을 호출해 보십시오.
  2. "x-terminal-emulator"가 없으면 gnome-terminal만 실행하세요.
  3. 실패하면 오류 알림을 표시합니다.

이것이 실제로 심볼릭 링크 호출의 잘못입니까 x-terminal-emulator, 아니면 궁극적으로 가리키고 /usr/bin/gnome-terminal.wrapperbash 논리에 "성공" 코드를 다시 내보내지 않기 때문에 발생합니까?

편집: 좋습니다. 명령이 훨씬 길고 복잡해 보이지만 아래 코드는 안정적으로 작동하는 것 같습니다. 단일 터미널 창만 표시하고 gnome-terminal기본값으로 설정되지 않은 경우 대체 터미널 앱을 호출하지만 실패 gnome-terminal하면 대체 터미널 앱을 호출합니다 x-terminal-emulator. 그리고 시도할 수 있는 다른 대안을 얼마든지 추가할 수 있어야 합니다.

/bin/bash -c "if [[ -x $(type -p x-terminal-emulator) ]]; then x-terminal-emulator; elif [[ -x $(type -p gnome-terminal) ]]; then gnome-terminal; else notify-send 'ERROR: App not found' 'Install a terminal app'; fi"

아래 @waltinator의 제안 덕분에 작동하게 되었습니다. 감사해요!

관련 정보