すべてのttyシェルでエイリアスを設定するには?

すべてのttyシェルでエイリアスを設定するには?

シェルtt2にエイリアスを設定しましたが、他のttyシェルでは機能しません。システム全体のエイリアスを作成する方法を知っていますか?

答え1

努力する必要はありません。ファイルを変更するだけです/etc/bashrc。わかりました、私は現在ttyでのみ動作すると思うかもしれませんが、友達なしで動作します。一度ログアウトし、必要なユーザーとしてもう一度ログインしてください。 SSHingまたは他の方法でテストすることもできます。

しかし、うまくいかない場合は、もちろんうまくいくと確信していますが、この記事を読んでください。多くの助けになります:/etc/profile

答え2

シェルプロセスが外部で新しいエイリアスを使用するように強制することはできないため、新しいエイリアスをロードする要求は、すべての端末のすべてのシェルインスタンスで行われる必要があります。

bashに入れて、各コマンドの後にコードを実行できます。PROMPT_COMMAND変えるだからあなたは次のようなものを使うことができます

reload_aliases () {
  . ~/.bash_aliases
}
PROMPT_COMMAND="$PROMPT_COMMAND
reload_aliases"

~/.bash_aliasesシェルにエイリアスを入力する代わりに、エイリアスを定義して編集します。このPROMPT_COMMAND変数はコマンドの実行後にのみ実行されるため、コマンドを実行する必要があります(たとえば:、何も実行しないコマンド)。空のコマンドラインでは十分ではありません。

aliasファイルに自動的に追加するようにコマンドを無視することもできますが.bash_aliases、1つのシェルに対してジョブ固有のエイリアスのみを定義したい場合は非常に混乱しているため、お勧めできません。このコマンドを使用して、現在のシェルに特定のエイリアスとその定義alias ALIASNAME >>~/.bash_aliasesALIASNAMEエイリアスの実際の名前に置き換えられます)を追加できます。

zshでは利用可能ですprecmdbashとは異なり、PROMPT_COMMANDbashは各プロンプトが表示される前に実際に実行されるため、プロンプトを押すだけで十分です。 zshもユーザーの介入なしにエイリアスファイルを再ロードできません。PROMPT_COMMANDprecmdEnter

または、次のように設定して、シェルが信号に反応するようにすることもできます。trap。シェルはSIGUSR1信号を使用しないため、それを使用してエイリアスをロードできます。

trap 'reload_aliases' USR1

reload_aliases機能は上記のとおりです。)このようにして、SIGUSR1信号をすべてのデバイスに送信する必要があります。インタラクティブエイリアスリストを編集するときのシェルインスタンス。このシグナルのデフォルトの動作はシェルを終了することですので、シグナルをスクリプトに送信しないでください。対話型シェルをリストする簡単な方法はありません。次のLinux関連スクリプトが近いが、競合状態が原因で関連性のないプロセスが予期せず終了する可能性があることに注意してください。

for pid in $(pgrep bash); do
  if cd "/proc/$pid" 2>/dev/null &&
     [ -c fd/0 ] &&
     grep '^SigCgt: .............[2367abef]..$' status; then
    kill -USR1 "$pid"
  fi
done

関連情報