CentOS 7で実行するシェルスクリプトの作成を開始します。どのインタープリターを呼び出す必要がありますか。また、Shebang行はどのように表示する必要がありますか?
私はこれを試しました:
#!/bin/sh
しかし、cd /bin
その後 ls -al
何百ものサブディレクトリがあり、どれもsh
ではありません。どちらを使用すればよいですか?スクリプトはいくつかのmavenコマンドを実行します。
実際、CentOS 7では、/bin/sh
は/bin/bash
へのシンボリックリンクであり、ほとんどのLinuxディストリビューションでデフォルトで使用可能なシェルです。
$ 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
の使用は同じです。
別の方法として、このシバンを使用できます:#!/usr/bin/env sh
または#!/usr/bin/env bash
。この場合、sh
が/bin
、/usr/bin
、またはどこかに決まっている場合でも、PATHで使用可能な最初のbash
またはsh
が実行されます。移植性には便利かもしれませんが、PATHにsh
という名前の実行可能ファイルが複数ある場合、セキュリティ上の問題が発生する可能性があることに注意してください。
必要なインタープリター(bash、csh、zsh、sh、Perlなど)を呼び出すことができます。
#!/bin/sh
はPOSIXly-correctであり、実行する必要があります。
ls /bin | grep s
からの出力は何ですか?
また、ファイルの権限を確認することもできます。私が最初のスクリプト(chmod +x ./myscript.sh
)を書いていたとき、それは私を殺しました。