ファイルが存在するかどうかを確認する必要があるスクリプトを記述しようとしています。コンソールで私は書きます
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi
そして私は得る
not mod
しかし、私が同じことをするスクリプトを書くとき:
#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi
スクリプトを実行すると、次のようになります。
./ex.sh: 2: [[: not found
mod
スクリプトを現在のディレクトリに保存し、ex.shという名前を付けて、実行可能であることを確認しました。スクリプトを呼び出すには、次のようにします。
./ex.sh
なぜこの問題が発生するのですか?私はすでに多くのことを試しました:
if [ -a /home ...
そして
if test -a /home ...
二人とも戻る
13: -a: unexpected operator
shの下でbash用に記述されたスクリプトを実行していますが、拡張構文機能の多くに欠けています– [[
はbash
組み込みコマンドであり、sh
では使用できません。
変化する #!/bin/sh
から#!/bin/bash
または#!/usr/bin/env bash
。
スクリプトの実行時に、shではなくbashを指定します。私は個人的に、それらがubuntu 12.10では異なることに気づきました:
bash script.sh arg0 ... argn