私はフォローアップをしています。このガイドssh-agentを使用してパスワードなしのSSH認証を設定する方法について説明します。
ssh-agentを起動するには、著者は次のコードを使用することをお勧めします.bash_profile
。
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi
なぜ信号0を捕まえるのか分かりません。 ~によるとマン7シグナルそのような信号はありません。
これは単にオタナエラーですか?それとも実際に何かを達成したのでしょうか?
答え1
答え2
@Matが答えに示すように、コマンドにSIGSPEC 0を使用すると、スクリプトの終了時にコマンドが実行されますtrap
。trap
この例は、何が起こるかを示しています。
$ cat tr.bash
#!/bin/bash
echo "PID: $$"
trap 'echo hi; exit 1' 0 1 2 15
while [ 1 ]; do
sleep 3
done
これを実行すると:
$ ./tr.bash
PID: 24086
それはここに座って無限に待っています。別のウィンドウでシグナルを送信すると、シグナル0がコマンドにリストされていても、kill
aがプロセスを終了しないことがわかります。kill -0
trap
$ kill -0 $(pgrep tr.bash)
$
ただし、kill
シグナル1を使用してスクリプトを作成すると、次のようになりますkill -1
。
$ kill -1 $(pgrep tr.bash)
$
スクリプトの終了を確認し、「hi」メッセージを2回印刷します。 1 つ目はシグナル 1 用、2 番目はスクリプト終了用です。
$ ./tr.bash
PID: 24086
hi
hi
答え3
シェルが終了すると、0のトラップが実行されます。通常、常に実行されている1つの場所でtmpファイルをクリーンアップするために使用されます。
tmp=/tmp/myscript.$$
トラップ 'rm -f $tmp;exit'0 1 2 15
これをたくさん作る
出口
トラップの端にある出口は、清掃時に正しい状態でシェルをシャットダウンします。