web-dev-qa-db-ja.com

スクリプトの実行時に[[:not foundが表示されるのはなぜですか?

ファイルが存在するかどうかを確認する必要があるスクリプトを記述しようとしています。コンソールで私は書きます

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
15
Buzu

shの下でbash用に記述されたスクリプトを実行していますが、拡張構文機能の多くに欠けています– [[bash組み込みコマンドであり、shでは使用できません。

変化する #!/bin/shから#!/bin/bashまたは#!/usr/bin/env bash

10
kev

スクリプトの実行時に、shではなくbashを指定します。私は個人的に、それらがubuntu 12.10では異なることに気づきました:

bash script.sh arg0 ... argn

0
Smeterlink