
ランニングの違いは何ですか?強く打つbash
コマンド自体とsh
コマンドソルバーを使用すると、sh
bashへのシンボリックリンクはどこにありますか?
私が見つけた主な違いは、kill
コマンドがシグナル名を許可せず、シグナル番号のみを受け入れることsh
です。sh
kill
ただし、sh
vs bash
runでは、kill
コマンドはすべてシェル組み込みコマンドです。呼び出しが使用されると、bashは異なる動作をするようですsh
。
この動作に関するドキュメントはありますか?
詳しくは下記をご覧ください。
スクリプトファイル
#!/bin/bash
some_bg_program()
{
sleep 10
}
some_bg_program&
pid=$!
kill -SIGTERM $pid
bash script.sh
次に実行した結果とsh script.sh
user@machine/tmp$ sh script.sh
script.sh: line 8: kill: SIGTERM: invalid signal specification
user@machine/tmp$ bash script.sh
(bash script.shは正常に実行され、エラーは発生しません。)
bash
情報とコマンドsh
:
user@machine/tmp$ which bash
/usr/bin/bash
user@machine/tmp$ which sh
/usr/bin/sh
user@machine/tmp$ ls -l /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Aug 4 2020 /usr/bin/sh -> bash # You can see the symlink here
user@machine~>ls -l /usr/bin/bash
-rwxr-xr-x. 1 root root 964608 Oct 30 2018 /usr/bin/bash
user@machine/tmp$ type sh
sh is hashed (/usr/bin/sh)
user@machine/tmp$ type bash
bash is hashed (/usr/bin/bash)
kill
Bash/shのコマンドに関する情報
user@machine/tmp$ cat script.sh
#!/bin/bash
which kill
type kill
user@machine/tmp$ sh script.sh
/usr/bin/kill
kill is a shell builtin
[email protected]/tmp>bash script.sh
/usr/bin/kill
kill is a shell builtin
kill
どちらの場合も組み込みシェルです。
最後に、bashメッセージは次のようになります。
$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
$ sh --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
ありがとう
答え1
bash
シェルがnameで始まると、このオプションで始まるsh
ようにPOSIXモードで自動的に実行されます。--posix
このマニュアルの「参照」セクションでは、bash
以下を参照してください。http://tiswww.case.edu/~chet/bash/POSIXシェルのPOSIXモードの説明です。このページには、組み込みkill
ユーティリティを使用したときに発生した問題について次のことが示されています。
次のリストは、「POSIXモード」が適用されたときに変更されるものです。
[...]
- 'kill' 組み込み関数は、'SIG' というプレフィックスが付いたシグナル名を受け入れません。
はい。kill
組み込みユーティリティは、SIG
POSIX モードでプレフィックスが付いたシグナル名を受け入れません。プレフィックスなしで信号名を使用できますSIG
。
kill -INT "$pid"
または
kill -s INT "$pid"
これも方法ですkill
このユーティリティのPOSIX仕様使うべきだそうです。
この信号は送信された基本信号と同じですkill -TERM "$pid"
。kill "$pid"
TERM
kill
0
シグナル番号は覚えにくく、短いリストを除いてUnicesごとに異なるため、シグナル番号(信号を除く)を使用しません。