"at"(バッチ) アクション+ダイアログ=なし

"at"(バッチ) アクション+ダイアログ=なし

目標:一定時間が経過した後、端末で「メッセージボックス」を開くことができるようにすることです。 (DebianベースのLinuxボックスで)しかし:

> at now + 3 min
dialog --infobox "Time to attend to matters\!" 6 33

出力は生成されません。 「ターミナルオープンエラー:不明」というシステムメールが表示されます。したがって、過去には機能していたダイアログボックスのいくつかの環境変数の前にプレフィックスを付けました。

TERM=linux DISPLAY=":0.0" dialog --infobox "Seek ye the truth\!" 6 33

これで生成された唯一のものは、エスケープシーケンスでいっぱいのシステム電子メールです。おそらくダイアログ自体の出力のようです。会話で「at」をうまく使うにはどうすればいいですか? (ありがとうございます!)

答え1

at無人でコマンドを実行するためのツールですcron。ユーザーセッションが存在しない場合、またはユーザーが別の端末にログインしている場合は、スケジュールされたコマンドを実行してデーモンがコマンドのatd標準出力を読み取り、それをユーザーに電子メールで送信できます。ユーザーが他のタスクを実行するには、標準出力をリダイレクトする必要があります。ただし、コマンドが何らかの方法で端末を識別する必要があるため、ユーザー端末にリダイレクトするのはやや面倒です。

遅延後に何かを表示するには、次のようにしてください。

(sleep 10 && /bin/echo "game over") &

答え2

プロセスに関連付けられた端末(tty)がdialogないため、使用されたコマンドは機能しません。同様atに非対話型環境を意図しました。対話する端末がないため、設定は役に立ちません。cronatdialogTERM

ログインしてXを実行している場合は、できるdialog別の端末に表示されるようにしてください。たとえば、

at now -f foo

fooどこで

xterm -display :0 -e dialog --msgbox "Seek ye the truth!" 6 33 &

十分にうまく動作します:

at-scriptでダイアログを実行する

しかし、いくつかの変更が追加されました。

  • 一つ情報画面に点滅するとすぐに消えます。使うメッセージボックス代わりに
  • at/batch 操作が完了するまで待たないでください。 「&」を使用してください。

応答が必要な場合は、dialog通常、テキストインターフェースを標準出力に書き込み、応答を標準エラーに書き込むことに注意してください。この--stdoutオプションを使用して元に戻すことができます(スクリプトを簡単にする)。 (zenityはこのオプションをサポートしていないため、スクリプトの回避策を介して調整する必要があるかもしれません)。

追加資料:

関連情報