CentOS 7で実行されるシェルスクリプトの作成を開始しました。どの通訳者を呼び出す必要があり、shebang行はどのような外観であるべきですか?
私はこれを試しました:
#!/bin/sh
しかし、と入力するとcd /bin
何百ls -al
ものサブディレクトリが表示され、それらのsh
どれを使用する必要がありますか?このスクリプトはいくつかのMavenコマンドを実行します。
答え1
実際、CentOS 7はほとんどのLinuxディストリビューションで提供されるデフォルトのシェルである/bin/sh
シンボリックリンクです。/bin/bash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 9 febr. 08:21 /bin/sh -> bash
(上記のコマンドが を返すと、正しいことになりNo such file or directory
ます。問題があるはずです。次に実行してwhich sh
正しいパスを知ることができます)
したがって、あなたの出力が私と同じであれば、#!/bin/sh
とを使用する#!/bin/bash
ことは同じです。
代わりに、次のshebangを使用できます:#!/usr/bin/env sh
または#!/usr/bin/env bash
。この場合、sh
設定された場所や場所に関係なく、PATHで最初に使用可能なもの、または何でも実行されます。移植性は便利ですが、PATHで指定された実行可能ファイルが複数ある場合はセキュリティ上の問題が発生する可能性があることに注意してください。bash
sh
/bin
/usr/bin
sh
答え2
必要な通訳者(bash、csh、zsh、sh、perl、または他の通訳者)を呼び出すことができます。
#!/bin/sh
POSIXlyは正確で実行する必要があります。
の出力は何ですかls /bin | grep s
?
また、ファイル権限を確認したい場合があります。私が最初のスクリプト()を書いたときにこれが死んでいましたchmod +x ./myscript.sh
。