root権限を必要とするコマンドを自動的に完了したときに認証プロンプトを無効にします。

root権限を必要とするコマンドを自動的に完了したときに認証プロンプトを無効にします。

たとえば、Firewall-cmd(実行するにはroot権限が必要です)を使用するときにオプションをオートコンプリートしようとすると(たとえば、「--perm」を書く)、ウィンドウにプロンプ​​トが表示されます(したがって、端末のsudoとは異なります)。パスワードを入力してTabキーを押します。オートコンプリートを使用するたびに以前にパスワードを入力するか、sudoを使用してコマンドを実行しても(特定の時間にメッセージを再表示しないように設定されています)、これが発生します。

一定期間パスワードを永久に入力するか、オートコンプリートの認証を完全に無効にする方法はありますか(まだ実際の実行プログラムに認証したいですか?

確実な解決策はrootとしてログインすることです(suまたはsudo -iを使用)。しかし、私はこれを避けたいと思います。

私はbashを使用しており、私のソースコードは.bashrcDebianパッケージに付属の標準ファイルです。bash_completionbash-completion

. /etc/bash_completion私のものを使うことができます.bashrc

実行complete -p firewall-cmd結果は
bash: complete: firewall-cmd: no completion specification

私がpolkitが関連していると思う理由(元のタグを参照)は、認証会話を中断したときに標準出力に次のものが表示されるためです。

Authorization failed.
    Make sure polkit agent is running or run the application as superuser.

ベストアンサー1

通常、Firewall-cmdなどのコマンドに関連する完了を表示するには、次の内容が返されるとcomplete -p firewall-cmd予想しますcomplete -F _firewall_cmd firewall-cmd。その後、以下を_firewall_cmd使用してtype _firewall_cmd機能を確認できます。

Debian の bash コンプリートパッケージは、complete -Dコマンドを使用してデフォルトのコンプリート機能を設定します。この機能は、初めて使用するときに特定の完成機能が使用可能であることを確認し、その場合はロードします。

したがって、どのように設定されているかを見る前に一度試してみることが重要です。

firewall-cmdそのために文書現在の起動の完了機能を定義します。

_firewall_cmd()
{
    local cur prev words cword split
    _init_completion -s || return
    firewall-cmd --state 1> /dev/null || return

/usr/bin/firewall-cmd プログラム自体は最終的に root アクセスと認証を必要とする Python スクリプトです。firewall-cmd --stateファイアウォールが実行中の場合、呼び出しは true を返します。したがって、完了コードの目的は、ファイアウォールが実行されていないときに完了を実行しないようです。ただし、ファイアウォールが実行されていることを確認するには、権限が必要なように作成され、不要なメッセージが表示されます。

firwall-cmd --state 1> /dev/null || return補完機能からその行を削除すると、パスワードを求めるプロンプトが表示されずにすばやく完了でき、その他の一般的な利点があります。

おすすめ記事