.sh 파일에서 .csh 파일 호출

.sh 파일에서 .csh 파일 호출

쉘 스크립트 파일 .csh에서 스크립트 파일을 호출 할 수 있나요 ?.sh

예를 들어, 나는 a.sh, b.csh. a.sh 파일에서 b.csh를 호출할 수 있나요? 그렇다면 어떻게 해야 할까요?

나는 이것을 쓰려고 노력했다. 이것은 ash 파일이다.

  1. variable= source /path/to/b.csh- 쓸모 없는
  2. sh ./path/to/b.csh- 쓸모 없는

b.csh파일의 shebang 줄이 다음과 같이 언급되어 있다는 점을 추가하고 싶습니다 .#!/bin/csh -fx

답변1

당신은 할 수구현하다 b.cshfrom , 예를 들어 또는 a.sh와 같은 프로그램을 실행할 수 있습니다 .grepcat

b.csh쉘이 실행되는 환경에 변수를 추가하는 실행을 기대할 수 없습니다 a.sh. b.csh는 하위 프로세스에서 실행되며 하위 프로세스는 상위 프로세스의 환경을 변경할 수 없습니다(이것이 기본 보안입니다).

데이터 통신이 필요한 경우 b.cshb.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.cshshebang이 존중되기를 원한다면.

그러면 스크립트를 실행하기 위한 새로운 프로세스가 생성됩니다. ./path/to/b.csh각 줄을 에서 직접 작성한 것처럼 실행 하려면 a.sh그렇게 해야 합니다 source ./path/to/b.csh(또는 . ./path/to/b.csh이식성을 위해 ). 그러나 Shebang도 무시하고 각 줄은 명령이 아닌 명령 sh처럼 평가됩니다 .csh

관련 정보