私のカスタムシェルに正しい出力があることを確認するために、シェルプロジェクトをテストするスクリプトを書いています。
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)はShebanを推薦しないでください#!/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
重要ではありません。複数のコピーがある場合は最初の勝利発見がインストールされました)。osh
PATH
/usr/local/bin
/usr/bin
env
そのバリアントを使用する場合:asに他のバイナリがないことを確認してください。osh
PATH
狡猾なと指摘したトンプソンシェル次のようにインストールできますosh
(シェルで作業しているため、そうではないと思われますが)、OCamlビルドシステム用のデバッグシェルもあります(通常はパッケージにありますomake
)。