나만의 쉘을 작성할 때 shebang을 어떻게 처리해야 합니까?

나만의 쉘을 작성할 때 shebang을 어떻게 처리해야 합니까?

내 사용자 정의 셸에 올바른 출력이 있는지 확인하기 위해 셸 프로젝트를 테스트하는 스크립트를 작성 중입니다.

str="HELLO"
echo $str
echo "*** YOU SHOULD SEE HELLO ABOVE ***"
ls *
echo "*** YOU SHOULD SEE THE OUTPUT FROM ls * ABOVE ***"
who|awk '{print $1}'
echo "*** YOU SHOULD SEE THE OUTPUT FROM who ABOVE ***"
echo $((1+2*3-4/5+6*7-8/9)))
echo "*** YOU SHOULD SEE THE NUMBER 49 ABOVE ***"

이것은 스크립트의 출력입니다.

$ ./shell < ../tst_exp.sh 
'PATH' is set to /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin.
HELLO
*** YOU SHOULD SEE HELLO ABOVE ***
CMakeCache.txt       hello_2.7-0ubuntu1_amd64.changes  hello_2.7-0ubuntu1.diff.gz  hello_2.7.orig.tar.gz  jeff      not  script.sh  testresult.txt
cmake_install.cmake  hello_2.7-0ubuntu1_amd64.deb      hello_2.7-0ubuntu1.dsc      hello-2.7.tar.gz   Makefile  osh  shell

build-area:
hello_2.7-0ubuntu1_amd64.build    hello_2.7-0ubuntu1_amd64.deb  hello_2.7-0ubuntu1.dsc
hello_2.7-0ubuntu1_amd64.changes  hello_2.7-0ubuntu1.diff.gz    hello_2.7.orig.tar.gz

.bzr:
branch  branch-format  branch-lock  checkout  README  repository

CMakeFiles:
3.5.1          CMakeDirectoryInformation.cmake  CMakeRuleHashes.txt  feature_tests.bin  feature_tests.cxx  Makefile.cmake  shell.dir    TargetDirectories.txt
cmake.check_cache  CMakeOutput.log          CMakeTmp         feature_tests.c    Makefile2          progress.marks  shellparser.dir

hello:
ABOUT-NLS   AUTHORS    ChangeLog    config.in  configure.ac  COPYING  doc     INSTALL      Makefile.in  NEWS  README  tests   TODO
aclocal.m4  build-aux  ChangeLog.O  configure  contrib       debian   gnulib  Makefile.am  man      po    src     THANKS

hello-2.7:
ABOUT-NLS   AUTHORS    ChangeLog    config.h   config.log     configure     contrib  doc     INSTALL   Makefile.am  man   osh  README  stamp-h1  THANKS
aclocal.m4  build-aux  ChangeLog.O  config.in  config.status  configure.ac  COPYING  gnulib  Makefile  Makefile.in  NEWS  po   src     tests     TODO
*** YOU SHOULD SEE THE OUTPUT FROM ls * ABOVE ***
[21420] 
dac
dac
*** YOU SHOULD SEE THE OUTPUT FROM who ABOVE ***
49
*** YOU SHOULD SEE THE NUMBER 49 ABOVE ***

출력은 예상되는데 추천 셰뱅을 추가하면 이상한 일이 발생합니다. 이것은 내가 테스트하고 있는 내 쉘입니다. 그렇다면 내 쉘과 함께 실행되고 내가 이름을 지정하고 osh다른 쉘처럼 추가하거나 설치할 수 있는 스크립트에 대한 shebang은 무엇이어야 합니까?/usr/local/bin

내 편집자(CLion)가 Shebang을 추천하지 말았어야 했다고 생각하는데 , Shebang이 설치되지 않았고 이상한 결과를 제공하기 때문에 #!/usr/bin/env bash그럴 수 없습니다 .#!/usr/bin/env osh

나만의 쉘을 작성할 때 shebang을 어떻게 처리해야 합니까?

답변1

그것은해야한다

#!/usr/local/bin/osh

쉘 이 /usr/local/bin.If /usr/local/bin에 있다면PATH

#!/usr/bin/env osh

그것도 작동해야 합니다... (사실 이것이 유일한 요점입니다. 켜져 있는 한 설치된 곳이면 어디든 env찾을 수 있으므로 켜져 있는지 여부는 중요하지 않습니다. 복사본이 여러 개 있는 경우 첫 번째 승리 발견이 설치되었습니다).oshPATH/usr/local/bin/usr/bin

env해당 변형을 사용하는 경우 :as에 다른 바이너리가 없는지 확인하십시오 .oshPATH교활한라고 지적했다톰슨 쉘다음과 같이 설치할 수 있으며 osh(셸에서 작업하고 있기 때문에 그럴 가능성이 낮다고 생각되지만) OCaml 빌드 시스템용 디버그 셸도 있습니다(보통 패키지에 있음 omake).

관련 정보