プログラムが端末に影響を与えないようにしますか?

プログラムが端末に影響を与えないようにしますか?

一部のプログラムは大規模スクリプトで起動して実行されますstty -echo。どんなプログラムなのかよく分からないので試行錯誤を経て探してみなければなりませんね。プログラムが端末にアクセスするのを防ぐだけで十分ですか</dev/null 2>&1 | tee /dev/null、それとも端末にアクセスする他の方法はありますか?

実際にどのプログラムが端末にアクセスしているのかわかりません(straceスクリプト全体を試してみると、17 MBのないファイルが生成されるため、tcsetattr端末の変更は単に制御文字を書くと仮定します)。問題は結論が出ない。時には端末を妨げたり、時にはそうではないこともあります。

次の紹介をスクリプトに入れます。端末の干渉が止まったようです。問題は解決しません。しかし、問題が解決しない理由は明確ではありません。プロセスがまだ経由して端末にアクセスしているの/dev/ttyか、プログラムで作成したエスケープコードがまだ経由で端末にダンプされているのかcat

MKTEMP="$(mktemp)"
mkfifo "$MKTEMP".fifo
(
  set +o xtrace
  cat "$MKTEMP".fifo
  rm -f "$MKTEMP".fifo "$MKTEMP"
) </dev/null 2>&1 &
exec 1>"$MKTEMP".fifo
exec 2>&1
exec 0</dev/null

答え1

ジレンマが修正されました。問題はsudo -g現在アカウントにパスワードがないのに端末ではバックグラウンドでパスワードを要求するという点だ。これはバグのようですsudo。アカウントにパスワードがない場合、パスワードは要求されません(ユーザーを変更するときは尋ねず、グループを変更した場合にのみ尋ねます)。

ubuntu@ubuntu:~$ sudo -u nobody ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
ubuntu@ubuntu:~$ sudo -g nogroup ls
[sudo] password for ubuntu: 
ubuntu@ubuntu:~$ 

NOPASSWD:回避策は、を追加してsudoers問題を解決することでした。

sudo不確実性は、次に端末を押すと、enter最終的にコマンドが許可され、しばらくの間パスワードを要求されないという事実によるものです。

関連情報