동일한 워크플로(셸 세션)에서 Bash와 함께 ksh/zsh 및 기타 셸을 사용할 수 있나요?
저는 Bash에 익숙하지만 ksh 또는 zsh에서 사용할 수 있는 일부 동작이 필요할 수도 있습니다. 적어도 충돌 없이 단일 쉘 세션에서 Bash를 사용할 수 있습니까?
여기서 해결해야 할 문제는 없으며 단지 쉘과 상식의 관계를 더 잘 이해하기 위한 아키텍처 문제일 뿐입니다.
답변1
여기에는 두 가지 문제가 있을 수 있습니다.
- 여러 셸 변형이 포함된 스크립트를 작성하고 함께 사용할 수 있나요?
- 하나의 쉘 변형에 대한 스크립트를 작성하고 이를 다른 쉘 인터프리터에서 실행할 수 있습니까?
첫 번째 질문의 경우:
예, 스크립트가 작성된 쉘 인터프리터에 의해 스크립트가 실행되는 한 가능합니다. 어떤 쉘을 사용하는지는 중요하지 않습니다.인터렉티브이는 스크립트에 올바른 #!
줄이 있거나 명시적 해석기(예: )를 사용하여 실행되는 한 ksh myscript
작동합니다 .
스크립트는 사용자(또는 다른 사람)가 작성한 명령처럼 작동합니다. 작성된 언어에 관계없이 다른 스크립트가 이를 호출할 수 있습니다(실행 가능하고 올바른 #!
-line이 있다고 가정).
두 번째의 경우:
구문 및 구문 측면에서 가장 낮은 공통 분모만 사용하여 스크립트를 작성하는 경우(이 세 쉘의 경우 POSIX sh
) 다음을 수행할 수 있습니다.상당히나는 그들이 이 모든 셸에서 실행될 것이라고 확신합니다(그러나 하나의 셸이 POSIX 규격을 따르지 않는 극단적인 경우가 있을 수 있다고 가정합니다). 하지만 를 사용하여 스크립트를 실행할 수도 있는데 왜 그것을 갖고 zsh
있거나 ksh
실행합니까 ?sh
/bin/sh
ksh93
( bash
또한 가능 zsh
하지만 해당 쉘에 익숙하지 않습니다)공통 확장에 있어 상당한 다양성을 제공합니다.sh
그러나 어떤 경우에는 구문과 의미가 일관성이 있는 것처럼 보이더라도다른 차이점으로 인해 이상한 문제가 발생합니다..
일반적으로 아니요. 하나의 쉘이 다른 쉘용으로 작성된 스크립트를 성공적으로 올바르게 실행할 수 있다고 가정할 수 없습니다. 예를 들어 bash
스크립트는 다음과 같습니다 .사용스크립트 ksh
는 다른 명령과 동일하지만 스크립트가 되어서는 안 source
됩니다 ksh
.
이상적으로는 서로 다른 쉘이 완전히 다른 스크립팅 언어라고 가정하고 앞서 했던 것처럼 해당 특정 쉘에 대해 작성해야 합니다.아니요Python 코드를 작성하고 Perl 또는 Ruby에서 실행될 것으로 예상합니다(일부 고안이 아닌 한).다중 언어 스크립트).
답변2
간단한 확인 예를 들어보겠습니다.
$ echo $SHELL
/bin/bash
$ for othershell in ash dash posh rksh bash ksh zsh;
do
$othershell -c "echo Hello from the $othershell";
done
Hello from the ash
Hello from the dash
Hello from the posh
Hello from the rksh
Hello from the bash
Hello from the ksh
Hello from the zsh