쉘 스크립트 파일 .csh
에서 스크립트 파일을 호출 할 수 있나요 ?.sh
예를 들어, 나는 a.sh
, b.csh
. a.sh 파일에서 b.csh를 호출할 수 있나요? 그렇다면 어떻게 해야 할까요?
나는 이것을 쓰려고 노력했다. 이것은 ash 파일이다.
variable= source /path/to/b.csh
- 쓸모 없는sh ./path/to/b.csh
- 쓸모 없는
b.csh
파일의 shebang 줄이 다음과 같이 언급되어 있다는 점을 추가하고 싶습니다 .#!/bin/csh -fx
답변1
당신은 할 수구현하다 b.csh
from , 예를 들어 또는 a.sh
와 같은 프로그램을 실행할 수 있습니다 .grep
cat
b.csh
쉘이 실행되는 환경에 변수를 추가하는 실행을 기대할 수 없습니다 a.sh
. b.csh는 하위 프로세스에서 실행되며 하위 프로세스는 상위 프로세스의 환경을 변경할 수 없습니다(이것이 기본 보안입니다).
데이터 통신이 필요한 경우 b.csh
b.csh가 필요합니다.인쇄이 데이터인 a.sh는 명령 대체를 통해 이를 캡처할 수 있습니다. -- 노이즈를 줄이기 위해 csh shebang 줄에서 해당 옵션을 제거 data=$(b.csh)
해야 할 수도 있습니다 .-x
답변2
당신이 쓴다면
./script.sh
쉘에 스크립트를 실행해야 한다고 알려주는 것입니다 ./script.sh
. 그러나 쉘은 어떻게 실행되어야 하는지 모릅니다 ./script.sh
. 대본 인가요 bash
? 아마도 csh
? 아니면 바이너리 ELF 파일일 수도 있습니다. 예를 들어 ls
? 아니면 python
스크립트일 수도 있습니다. 이를 이해하기 위해 운영 체제는 파일의 첫 번째 바이트를 살펴봅니다. shebang을 찾으면 shebang에 지정된 프로그램으로 파일을 처리해야 함을 의미합니다.
따라서 스크립트의 첫 번째 줄은 다음과 같습니다.
#!/usr/bin/bash
...
bash
프로그램이 지정한 디렉토리 로 파일을 처리 /usr/bin
하고 효율적으로 실행합니다 bash ./script.sh
.
하지만 을 작성하면 sh ./path/to/b.csh
해당 파일을 이라는 프로그램으로 직접 처리하게 됩니다 sh
. sh
첫 번째 줄은 주석으로 시작하는 줄을 해석하기 때문에 무시됩니다 #
.
sh ./path/to/b.csh
따라서 작성해서는 안되지만 ./path/to/b.csh
shebang이 존중되기를 원한다면.
그러면 스크립트를 실행하기 위한 새로운 프로세스가 생성됩니다. ./path/to/b.csh
각 줄을 에서 직접 작성한 것처럼 실행 하려면 a.sh
그렇게 해야 합니다 source ./path/to/b.csh
(또는 . ./path/to/b.csh
이식성을 위해 ). 그러나 Shebang도 무시하고 각 줄은 명령이 아닌 명령 sh
처럼 평가됩니다 .csh