하나의 컴퓨터에서 여러 버전의 셸을 실행하는 방법

하나의 컴퓨터에서 여러 버전의 셸을 실행하는 방법

가능한 한 많은 환경에서 일부 스크립트1를 테스트하기 위해 UNIX(또는 Unix 계열 운영 체제)를 사용하여 여러 가상 머신을 설정했습니다.

  • 리눅스
  • 솔라리스
  • OSX2
  • FreeBSD

그러나 여러 가지 면에서 실제로는 다른 운영 체제로 테스트하는 것보다 관심을 갖고 있는 각 셸의 다른 버전으로 테스트하는 것이 더 중요하다고 생각합니다.

나는 내 가상 머신이 끝없이 변하는 것처럼 보이는 것을 원하지 않기 때문에 주어진 가상 머신에 각 셸의 여러 버전을 설치하고 싶습니다. 예를 들어 테스트하면 [:bash,:zsh,:fish,:ksh,:csh,:tcsh,:sh,:dash,:ash]9개의 셸이 있고, 각 셸의 평균 3개 버전을 테스트한다고 가정하면 100개가 넘는 VM이 ​​있습니다.

# operating_systems * shells * shell_versions
            4       *   9    *     3

단일 컴퓨터나 가상 머신에 특정 셸의 여러 버전을 설치하고 사용할 수 있는 실용적인 방법이 있습니까? 예를 들어 하나의 Linux VM에 Bash 1, Bash 2, Bash 3 및 Bash 4를 설치할 수 있습니까?

나는 깨달았다

  1. 일부 조합은 덜 중요하므로 무시될 수 있습니다.
  2. 결국에는 각 운영 체제의 여러 버전을 테스트하고 싶습니다.

하지만 그것들은 이 질문과는 별개이므로 이것이 가능한지 고려하기 위해 그것들을 따로 두겠습니다.

그래서:단일 시스템에 특정 셸의 여러 버전을 설치하고 사용하는 실용적인 방법이 있습니까?


1 나는 "스크립트"라는 용어를 느슨하게 사용합니다. 내가 테스트하고 싶은 첫 번째 일은 rc셸 파일에서 , 또는 무엇이든 무엇인가를 얻는 것 .zshrc입니다 .bash_profile. 따라서 자체 shebang 줄이 없습니다. 따라서 우리는 코드 조각이 여러 셸에서 작동하도록 만들고 싶습니다. 다른 크로스 셸 유용한 것들은 다른 컴퓨터에서 사용하고 싶은 함수와 별칭입니다. 비록 내가 가장 좋아하는 셸(Z Shell)이 모두 반드시 있는 것은 아니지만 Bash나 Korn을 사용할 수 있게 해 줄 수도 있습니다. 또한 내가 좋아하는 쉘을 shebang 라인에 넣을 수 없더라도 여러 컴퓨터의 쉘 스크립트에서 사용하고 싶은 유용한 조각도 있습니다.

오해의 소지가 있는 내용을 말하지 않기 위해 완전히 주제에서 벗어난 메모 2개 : 저는 실제로 OS를 설정하지 않았습니다. 아무도 "야! OS X를 포함하지 않는 게 어때?"라고 말하지 않을 것입니다.

답변1

소스에서 빌드하려는 경우 각 버전을 별도의 접두사에 설치한 다음 그에 따라 스크립트의 경로를 조정할 수 있습니다.

bash, fish, ksh, tcsh, zsh 및 dash는 모두 --prefix구성 매개변수를 지원하므로 각 버전을 다운로드하여 실행할 수 있습니다 ./configure --prefix=/opt/SHELL-VERSION; make; make install. 그런 다음 각 버전을 사용하려면 PATH를 /opt/SHELL-VERSION/bin앞에 설정하십시오.

csh는 조금 다르며 더 많은 수동 작업이 필요합니다. 필요하다고 판단되면 FreeBSD 소스 트리에서 소스 코드를 가져와서 Makefile을 편집할 수 있지만 실제로 대부분의 사람들은 tcsh를 사용합니다.

Ash에는 정식 소스가 없다고 생각하지만 비슷하게 처리될 수 있습니다.

답변2

Zanchey가 말했듯이 각 쉘 버전을 자체 접두사에 설치할 수 있습니다. PATH에 넣으려면 이름을 바꾸고 /usr/bin/에 복사하면 됩니다. 예를 들어:

$ bash1
bash-1.0$ ./myscript.sh
# Code here.
bash-1.0$ bash2
# And so on...
user@user-MacBook-Pro:~$ zsh1
# and again until you finish...
user@user-MacBook-Pro ~> exit
# Don't just skip into shells, or deal with the exit. Or just spam ^D.
$ exit

답변3

아스다프런타임이 언어, 셸 등 무엇이든 관계없이 "단일 CLI 도구를 사용하여 여러 런타임 버전을 관리"하도록 특별히 설계되었습니다. 그것은 가지고있다Zsh 플러그인, 따라서 이는 자체 솔루션을 롤링하는 것보다 훨씬 더 편리합니다.

고쳐 쓰다 더 편리할 수도 있지만 asdf언급된 모든 쉘에 대한 플러그인이 없으므로 Zanchey의 방법을 사용하는 것이 좋습니다.

관련 정보