スクリプトを実行する前にユーザーの確認を求めますか?


8

(ダブルクリックで)スクリプトを実行するときに、ユーザー確認(確かにはい/いいえ)タイプのダイアログボックスを取得する方法はありますか?ターミナルではありませんが、次のようなグラフィカルな確認ボックス: ここに画像の説明を入力してください

(画像がWindowsからのものであることはわかっていますが、Linuxの画像は見つかりませんでした)

回答:


13

使用する方法があります zenity

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

ここに画像の説明を入力してください

このコマンドの終了ステータスは$?、次のような変数でテストできますif [ $? -eq 1 ];then exit 1 ; fi0OK1キャンセルです。この構成は、後でポップアップの終了ステータスをテストする必要がある場合にうまく機能$?します。おそらく、ポップアップが変数に終了した直後に保存します。コメントで説明したように、以下のような構造も機能します。

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
ケビン

その方法で行うことができますが、私はより「伝統的な」スタイルを好む
セルギー・コロディアズニー

2
プログラムの終了ステータスを別のプログラム(または組み込みのシェル)に送り、その終了ステータスをテストすることによって、プログラムの終了ステータスをテストするのは、私にはかなりばかげているように見えました。
ケビン

少しばかげていますが、習慣の力になりました
セルギー・コロディアズニー

6

xmessageスクリプト自体で使用できます。「シバン」の後に次のようなものを置きます:

xmessage "Are you sure?"

「よろしいですか?」というグラフィカルなメッセージが表示されます。「大丈夫」ボタン付き。

xmessage複数のボタンを設定して、ボタンの内容を変更できます。各ボタンで実行するアクションを構成することもできます。

例えば、

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

man xmessageすべてのオプションについては、を参照してください(たくさんあります)。


おかげで...このソリューションはまた、機能性の面、両方の仕事...で...より良い探しダイアログちょうどそのzenityを使うディスプレイです...罰金に動作します
mayank budhwani

5

それを行う方法をあなたに教える代わりに、私はあなたがそれをするべきではないことをあなたに伝えます。

TL; DR-スクリプトを変更しないでください。代わりに、ファイルマネージャーを構成するか、ユーザーが誤ってファイルマネージャーを実行した理由を理解してください。

編集:一般的な設定では不十分で、ユーザーからの特別な確認が必要であるかのように、スクリプトを何らかの形で特別なものとして扱っているようです。それをダブルクリックすると、ある確認。ユーザーが誤ってそれを実行していることがわかった場合は、なぜそれを実行するのかを理解し、代わりに解決する必要があります。次に、実際の問題は、確認を要求する方法ではなく、ユーザーが誤って実行するのを防ぐ方法です。

問題を明らかにする方法から、ファイル(ファイル)がある場所に移動し、ファイルマネージャーからそれをクリックすることにより、プログラム(スクリプト)が実行されることを期待しているようです。システム内の他のすべてのプログラムについて考えます。そのようにいくつ始めますか?/usr/local/binFirefoxの起動時に移動しますか?もちろんそうではありません。アプリケーションメニューからクリックします。(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ます。


スクリプトをダブルクリックしているので、これを確認するのはファイルマネージャの仕事です。スクリプトを実行する必要があるかどうかを確認するのは、スクリプトの仕事ではありません。これを極端にします。プログラムを呼び出すたびに確認する必要があったとしたら、どれほどばかげていると思いますか。

プログラムが確認を求めなければならないのは、危険で不可逆的な可能性のあることを実行しようとしているときだけです。たとえば、ファイルを上書きしたり、ゴミ箱をバイパスしたりします。そして、これらの例でさえ、プログラムに何か特定のことをさせることについてであることに注意してください。彼らはそのようなプログラムを始めることについてではありません。プログラムがそのような危険なことを行うことのみを目的とする場合は、確認を求めてはなりません。

実際、Nautilus(Gnomeファイルマネージャー)は、デフォルトで、スクリプトを実行する(または、テキストエディターで開く)かどうかを確認するメッセージを表示します。

Nautilus確認ダイアログ

そしてもちろん、この動作は構成可能であり、ユーザーにそれをオフにする可能性を与えます(実行可能テキストファイルのエントリに注意してください)。

Nautilus設定メニュー-動作タブ

そのため、スクリプトに迷惑な確認ダイアログを追加しないでください。ファイルマネージャを正しく設定します。そして、ユーザーに同じことをさせてください。


1
これは他の人に簡単かつ安全に共有することができないため、実際にはソリューションではありません。
Ismael Miguel、

ありがとう...私はそれを行う方法を知っています..しかし、これはすべてのスクリプトに確認を追加します...特定のスクリプトにそれを求めます...
mayank budhwani

@IsmaelMiguelですが、それが答えの要点です。共有しないでください。プログラムの動作とシステムの動作/経験という2つの異なるものがあります。2つをマージしないでください。
carandraug 2016

@IsmaelMiguelこの回答は、ユーザーがしたいことのアンチパターンを指摘しています。彼はアレルギーがあるので、それは要求者に魚を与えません。
Braiam 2016

@mayankbudhwaniあなたはまだ間違った問題を解決しています。なぜその特定のスクリプトは特別なのですか?ユーザーが誤ってクリックした場合、それは別の問題です。別の方法で回答を編集しました。
carandraug 2016

2

yadを使用することができます。これは、はるかに構成可能であるため、ステロイドのゼニティのようなものです。Ubuntuのソフトウェアセンターからインストールできます。最も基本的な形式では、次のように入力できます

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

これが見えるはずです: スクリーンショット1

「OK」が押された場合は、戻りコード0が返されます。「キャンセル」が押された場合は、戻りコード1が返されます。

ボックスを中央に配置し、幅を調整することをお勧めします。先頭のタブを使用して、「Are you sure?」というテキストを配置します。より右側にあり、常に上にあります。これには、次のものが必要です。

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

「Are you sure?」の前の「\ t」を除いて、ほとんどのスイッチは自明です。これは、テキストを印刷する前にタブスペースを追加するだけです。これが見えるはずです:ここに画像の説明を入力してください

ボックスは中央に配置され、常に上に表示され、見栄えがよくなります。変数を設定して、どのボタンが押されたかをテストするには、以下を使用します。

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

この例では、OKが押された場合は0に、キャンセルが押された場合は1に設定される変数$ resultを使用しています。

ヤドのヘルプについては、あなたは使用することができるman yadyad --help-allが、私は実用的な例が適応しやすくなりました。ここにいくつかあります。私の意見では、yadは構成可能であるため、zenityよりも使用可能です。


それが私が以前に一度yadの使用を投稿した人を助ける場合に備えて。あなたはここでそれを見ることができます:askubuntu.com/questions/488350/...
スクービー-2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.