쉘 스크립트의 동일한 스크립트에 tcsh 및 bash 명령이 모두 포함될 수 있습니까?

쉘 스크립트의 동일한 스크립트에 tcsh 및 bash 명령이 모두 포함될 수 있습니까?

예를 들어 tcsh를 사용해서 많은 코드를 수정했는데, 많은 사람들이 bash가 더 현대적이라고 하니까, 나도 bash를 배워보고 싶어요. 두 명령이 모두 포함된 스크립트를 사용할 수 있습니까? 개인용이므로 고급스러움은 문제가 되지 않습니다.

답변1

나는 스크립트에서 쉘 유형을 혼합하고 일치시키는 것을 권장하지 않습니다.

  1. 명령을 실행하고 결과를 반환하기 위해 셸을 시작하는 효율성이 떨어집니다.
  2. 스크립트에 필요한 모든 것을 스크립트에 유지하는 이유 중 하나는 스크립트가 함수 등에서 선언되고 반환된 모든 변수에 액세스할 수 있다는 것입니다. 몇 가지 명령을 실행한 다음 반환하기 위해 전체 변수 스택을 다른 셸에 전달하는 것은 다소 직관에 어긋나는 것 같습니다.

가장 좋은 방법은 알려진 스크립트를 복사하고 호출 셸을 변경하여 무엇이 잘못되었는지 확인하여 해결해야 할 구문상의 차이점이 어디인지 파악하는 것입니다.

하지만 간단히 말해서 스크립트에 섞어서 사용하려고 하는 것은 좋지 않은 생각인 것 같습니다. (몸소)

답변2

나는 다른 답변에 동의합니다. 이것은 일반적으로 좋은 생각이 아닙니다.

그러나 스크립트에서 셸을 호출할 수 있습니다. 현재 tcsh를 사용하는 스크립트를 작성 중이고 일부 bash 관련 기능을 사용하려는 경우 bash를 명시적으로 호출할 수 있습니다. 예를 들어, bash를 사용하면 stdout과 stderr을 독립적으로 리디렉션하는 것이 더 쉬워집니다.

#!/bin/tcsh -f

echo Hello, tcsh
bash -c 'echo Hello, bash 1>&2' # writes to stderr
echo Good-bye, tcsh

그러나 장기적으로는 bash를 사용하도록 전체 스크립트를 변환하는 것이 더 나을 수도 있습니다.

필수 링크:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

답변3

아니요, 불가능합니다.

그 이유는 쉘은 실행되면서 파일 덩어리를 읽는 데, 하나의 덩어리에는 다른 쉘에서 실행하려는 쉘 코드가 포함될 수 있지만 첫 번째 쉘이 이미 읽었으므로 두 번째 쉘이 이를 읽을 수 없기 때문입니다. 스크립트 실행에 대해(쉘이 lseek()파일에 액세스할 수 있는 경우 작동할 수 있지만 쉘 언어가 그렇게 고급이지는 않습니다)

그러나 이를 수행하는 더러운 방법이 있습니다. zsh에는 쉘 언어를 동적으로 전환할 수 있는
명령이 있습니다 . emulate그러나 tcsh와 bash를 에뮬레이트하기 위해 zsh를 사용하는 것은 지나치게 복잡할 뿐만 아니라 더럽습니다.

.

나는 bash가 더 현대적이라고 생각하지 않습니다. 실제로는 더 광범위하지만 기능을 매우 느리게 채택합니다. Bash는 호환성에 더 중점을 둡니다.

관련 정보