스크립트를 실행하기 전에 사용자 확인을 요청 하시겠습니까?


8

스크립트를 두 번 클릭하여 실행할 때 사용자 확인 (예 : 아니오 / 아니요) 유형 대화 상자를 얻는 방법이 있습니까? 터미널에서는 아니지만 그래픽 확인 상자는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

(나는 이미지가 창문에서 나온다는 것을 알고 리눅스를 찾을 수 없었다)

답변:


13

사용하는 방법이 있습니다 zenity

zenity --question --text "Are you sure?"

여기에 이미지 설명을 입력하십시오

$?다음과 같이 변수를 사용 하여 해당 명령의 종료 상태를 테스트 할 수 있습니다 if [ $? -eq 1 ];then exit 1 ; fi. 0입니다 OK, 1취소입니다. 이 구문은 나중에 팝업의 종료 상태를 테스트해야하는 경우에 효과적입니다. 팝업 $?이 변수에 종료 된 직후에 저장 될 수 있습니다 . 의견에서 논의했듯이 벨로우즈와 같은 구조도 작동합니다.

if zenity --question --text "Are you sure" 
then
     runSumeFunction
else
     exit 1
 fi

또는

 zenity --question --text "Are you sure?" || echo "User isn't sure:/"

2
대괄호가 필요하지 않습니다. 그냥 할 if zenity...또는zenity... || exit
케빈

그렇게 할 수는 있지만 더 전통적인 스타일을 선호합니다
Sergiy Kolodyazhnyy

2
종료 상태를 다른 프로그램 (또는 셸 내장)에 공급 한 다음 종료 상태를 테스트하여 프로그램의 종료 상태를 테스트하는 것이 다소 어리석은 것처럼 보였습니다.
케빈

그것은 다소 어리석지 만 습관의 힘이되었습니다
Sergiy Kolodyazhnyy

6

xmessage스크립트 자체에서 사용할 수 있습니다 . "shebang"뒤에 다음과 같은 것을 넣으십시오.

xmessage "Are you sure?"

"정말입니까?"라는 그래픽 메시지가 표시됩니다. "괜찮아"버튼으로.

xmessage하나 이상의 버튼을 갖도록 구성 하고 버튼에 기록 된 내용을 변경할 수 있습니다. 각 버튼으로 수행 할 작업을 구성 할 수도 있습니다.

예를 들어

xmessage -buttons ok:0,cancel:1 "Are you sure?"  

man xmessage모든 옵션을 참조하십시오 (많은 옵션이 있습니다).


감사합니다 ...이 솔루션은 또한 기능면 모두 작업 ...에 .. 더 나은 찾고 대화 단지 zenity 표시입니다 .. 잘 작동합니다
mayank budhwani

5

그렇게하는 방법을 알려주는 대신, 그렇게하지 말아야한다고 말할 것입니다.

TL; DR-스크립트를 변경하지 마십시오. 대신 파일 관리자를 구성하거나 사용자가 실수로 파일 관리자를 실행 한 이유를 파악하십시오.

편집 : 일반 설정이 충분하지 않고 스크립트가 사용자의 특별한 확인이 필요한 것처럼 스크립트를 어떻게 든 특별하게 취급하는 것 같습니다. 그것을 더블 클릭 입니다 확인. 사용자가 우연히 그것을 실행하는 것을 발견하면 왜 그렇게하는지 알아 내고 해결해야합니다. 그런 다음 당신의 진짜 문제는 되지 방법 실수로 실행 사용자를 방지하기 위해 확인 만 요구하는 방법에 대해 설명합니다.

문제를 드러내는 방식에서 파일 위치로 이동 한 다음 파일 관리자에서 파일을 클릭하여 프로그램 (스크립트)이 실행될 것으로 예상됩니다. 시스템의 다른 모든 프로그램에 대해 생각해보십시오. 그렇게 몇 명이나 시작합니까? /usr/local/bin파이어 폭스를 시작할 때 탐색 합니까? 물론 그렇지 않습니다. 당신은 응용 프로그램 메뉴에서 그것을 클릭하십시오. (gnome tweak은 python 스크립트 일 수 있습니다.)

응용 프로그램 메뉴에서 실수로 클릭하는 것을 고려하지 않기를 바랍니다. 따라서 문제는 파일 관리자 대신 스크립트를 표시하는 방법이됩니다. 이렇게하려면 다음을 수행하십시오.

  1. 사용자가 실수로 클릭 할 수있는 다른 파일에서 스크립트를 멀리 두십시오 (일반적인 위치는 /usr/local/bin/시스템 전체 설치 또는 ~/.local/bin/사용자 설치를위한 것입니다)

  2. 데스크탑 엔트리 파일을 작성하십시오 ( 표준 사양을 읽으십시오 ). 최소 사례는 다음과 같습니다.

    [Desktop Entry]
    Name=Your script name
    Exec=path/for/your/script
    Icon=path/for/your/icon/can/be/svg
    Terminal=false
    Type=Application

    그리고 그것을 밀어 /usr/local/share/applications/your-script.xml~/.local/share/your-script.xml.

  3. 마지막으로 실행하십시오 update-desktop-database.


스크립트를 두 번 클릭하기 때문에 파일 관리자가 확인해야합니다. 스크립트의 실행 여부를 확인하는 것은 스크립트 작업이 아닙니다. 이것을 극단적으로 가져 가십시오. 프로그램을 호출 할 때마다 확인해야한다고 얼마나 우스운 지 상상할 수 있습니까?

프로그램이 확인을 요청해야하는 유일한 경우는 위험하고 돌이킬 수없는 일을하려고 할 때입니다. 예를 들어 파일을 덮어 쓰거나 휴지통을 우회합니다. 그리고이 예제들조차도 프로그램이 특정한 것을 수행하게하는 것에 관한 것입니다. 그들은 그러한 프로그램을 시작하는 것이 아닙니다. 프로그램의 목적이 그러한 위험한 일을하는 것이라면 확인을 요구해서는 안됩니다.

실제로 노틸러스 (Gnome 파일 관리자)는 기본적으로 스크립트 실행 여부를 확인하라는 메시지를 표시합니다 (또는 텍스트 편집기에서 열기 만하면됩니다).

노틸러스 확인 대화 상자

물론이 동작은 구성 가능하므로 사용자가이를 해제 할 수 있습니다 ( 실행 파일 텍스트 항목 참조 ).

노틸러스 환경 설정 메뉴-동작 탭

따라서 스크립트에 성가신 확인 대화 상자를 추가하지 마십시오. 파일 관리자를 올바르게 구성하십시오. 그리고 사용자들이 똑같이하도록하십시오.


1
이것은 다른 사람과 쉽고 안전하게 공유 할 수 없기 때문에 실제로는 솔루션이 아닙니다.
Ismael Miguel 1

감사합니다 ... 난 그렇게하는 방법을 알고 ..하지만이 모든 scipts에 확인을 추가 ... 나는 ... 특정 스크립트를 원하는
mayank budhwani

@IsmaelMiguel하지만 그게 답의 요점입니다. 공유해서는 안됩니다. 프로그램의 행동과 시스템 행동 / 경험의 두 가지가 있습니다. 둘을 병합해서는 안됩니다.
carandraug

@IsmaelMiguel이 답변은 사용자가 원하는 일의 안티 패턴을 나타냅니다. 알레르기가 있기 때문에 물고기에게 물고기를주지 않습니다.
Braiam

@mayankbudhwani 여전히 잘못된 문제를 해결하고 있습니다. 특정 스크립트가 왜 특별한가요? 사용자가 실수로 클릭하면 다른 문제입니다. 다른 접근 방식으로 답변을 편집했습니다.
carandraug

2

훨씬 더 구성 가능한 스테로이드에서 전신과 같은 yad를 사용할 수 있습니다. 우분투의 소프트웨어 센터에서 설치할 수 있습니다. 가장 기본적인 형태로 다음을 입력 할 수 있습니다.

yad --title=Question --image=dialog-question --text="Are you sure?"

그리고 당신은 이것을 볼 것입니다 : 스크린 샷 1

OK를 누르면 리턴 코드가 0이되고, Cancel을 누르면 리턴 코드가 1이됩니다.

상자를 가운데에 놓고 너비를 조정하는 것이 좋습니다. 앞 탭을 사용하여 "정확합니까?" 더 오른쪽에 있고 항상 위에 있습니다. 이를 위해서는 다음이 필요합니다.

yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200

"정말입니까?"앞의 "\ t"를 제외하고 대부분의 스위치는 자명합니다. 텍스트를 인쇄하기 전에 탭 공간을 추가하기 만하면됩니다. 이제 우리는 이것을 볼 것입니다 :여기에 이미지 설명을 입력하십시오

상자는 항상 중앙에 위치하며 더 좋아 보입니다. 어떤 버튼을 눌렀는지 테스트 할 변수를 설정하려면 다음을 사용하십시오.

yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result

이 예에서는 변수 $ result를 사용하고 있는데, OK를 누르면 0으로 설정되고 Cancel을 누르면 1로 설정됩니다.

야드에 대한 도움말 당신은 사용할 수 있습니다 man yad또는 yad --help-all하지만 난 실례가 적응하기 쉽다 발견했다. 여기에 몇 가지가 있습니다 . yad는 훨씬 더 구성 가능하므로 내 의견으로는 zenity보다 더 유용합니다.


내가 yad의 사용법을 한 번 게시 한 사람에게 도움이되는 경우. 여기에서 볼 수 있습니다 : askubuntu.com/questions/488350/…
Scooby-2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.