달리는 것의 차이점은 무엇입니까?세게 때리다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마다 다르기 때문에 신호 번호(신호 제외)를 사용하지 않겠습니다 .