Fish Shellで自動ログアウトを有効にする方法は?

Fish Shellで自動ログアウトを有効にする方法は?

クイックGoogle検索でTMOUTパラメータを設定して自動ログアウト(テキストコンソールの場合)を有効にできることがわかりました。しかし、後でこれがbashシェルでのみ機能することがわかりました。

デフォルトのシェルがFishの場合、自動ログアウトタイマーを設定する方法はありますか?

何が目的ですか?もちろん安全です。 1分間アイドル状態のときにロックするようにしたいと思います。

ベストアンサー1

Fish自体では直接サポートされていませんが、TMOUTあなたに適したいくつかの選択肢があります。私の2つのアプローチはかなり異なるので、2つの別々の答えに含めます。

まず(代わりに私のものこれは好ましい方法ですが、Fishのバージョンに応じてBash機能に最も近いです。

短い答え:

新しいファイルを作成します~/.config/fish/conf.d/fish_tmout.fish

function start_logout_timer --on-event fish_prompt
    # Allows $last_pid to work in a function
    status job-control full
    if set --query __fish_tmout_pid
        # Stop previous timer
        kill -- -$__fish_tmout_pid
    end
    # Start new timer
    FISH_PID=%self sh -c "sleep 60; kill -HUP $FISH_PID" &
    # Allows logout without warning of background jobs
    disown
    set -gx __fish_tmout_pid $last_pid
end

function stop_logout_timer --on-event fish_preexec
    if set --query __fish_tmout_pid
        kill -- -$__fish_tmout_pid
    end
    set --erase __fish_tmout_pid
end

シェルを再起動すると、自動的にログアウトする前の1分間、シェルには何も表示されません。

互換性:フィッシュ3.2.2以降。 3.0.2以前では動作しないことが知られています。

小さな警告:実行するときps

注:各シェルはグローバル(非ユニバーサル)変数で独自のPIDとタイマーを追跡するため、実行中の複数のシェルインスタンスを処理します。

説明する:

このBash機能を他のフィッシュ機能と一緒に複製してみることができます。ただし、(スタックオーバーフローに関するご意見に応じて)ログアウトすることを忘れた場合に備えて、他のセッションを保護するためにこれを実行したいので、この機能の制限と他のシェルでTMOUT利用可能ですオプションを知っている必要があります。つまりless、端末を制御できる「フルスクリーン」アプリケーション(他の多くのアプリケーションなど)から離れているとvim機能しません。TMOUTBashをアイドル状態にした場合にのみ処理されます。プロンプトに従ってください

繰り返しますが、このアプローチには同じ制限があります。これを念頭に置いて...

Bashマニュアルには何を言うについてTMOUT

対話型シェルでは、この値はデフォルトのプロンプトを実行してから入力行を待つ時間(秒単位)として解釈されます。フル入力行に達しないと、Bashは終了する前にこの時間待機します。

Fishの言葉によると、

  • 2 つの連続プロンプト表示間の時間間隔
  • プロンプト表示とユーザーが対話型コマンドを入力するまでの時間間隔

Fish 関数フックは次のことを処理できます。

  • fish_prompt
  • fish_preexec

したがって、上記のスクリプトは次のようになります。

  • sleepメッセージが表示されると(fish_prompt)自動ログアウトタイマーが開始されます(通過)。
  • fish_prompt次のプロンプトが表示されるか()コマンドが入力されたら()、タイマーを停止します(所有サブプロセスを終了してログオフして)fish_preexec
  • SIGHUPタイマーが終了せずに期限切れになると、シェルからログアウト(通過)

おすすめ記事