シェル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_aliases
(ALIASNAME
エイリアスの実際の名前に置き換えられます)を追加できます。
zshでは利用可能ですprecmd
bashとは異なり、PROMPT_COMMAND
bashは各プロンプトが表示される前に実際に実行されるため、プロンプトを押すだけで十分です。 zshもユーザーの介入なしにエイリアスファイルを再ロードできません。PROMPT_COMMAND
precmd
Enter
または、次のように設定して、シェルが信号に反応するようにすることもできます。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