3

Linux Ubuntuで.shファイルを作成しましたが、完全に機能します。ただし、Mac では、ファイルが同じディレクトリにある場合でも、ファイルが見つからなかったことを常に返します。誰でも私を助けることができますか?

.sh ファイル:

if [ ! -f file-3*.jar ]; then
echo "[INFO] jar could not be found."
exit
fi

追加したいと思ったのですが、これは複数のファイル用ではなく、複数の末尾に名前が変更されたファイル用です。

4

4 に答える 4

1

@Paul Rの回答へのコメントで、「シェルスクリプトもjarファイルと同じディレクトリにあります。そのため、SHファイルをデフォルトでターミナルで開くように割り当てた後、ダブルクリックするだけです。」それが問題だと思います.シェルスクリプトをダブルクリックして実行すると、スクリプトが配置されているディレクトリではなく、ユーザーのホームディレクトリに設定された作業ディレクトリで実行されます。これを回避するには、スクリプト cd をそのディレクトリに移動します。

cd "$(dirname "$BASH_SOURCE")"

編集: $BASH_SOURCE はもちろん、他のシェルでは利用できない bash 拡張機能です。スクリプトが bash での実行を期待できない場合は、代わりにこれを使用します。

case "$0" in
    */*)
        cd "$(dirname "$0")" ;;
    *)
        me="$(which "$0")"
        if [ -n "$me" ]; then
            cd "$(dirname "$me")"
        else
            echo "Can't locate script directory" >&2
            exit 1
        fi ;;
esac

ところで、[ ! -f file-3*.jar ]一致するファイルが複数あると奇妙に失敗するため、この構造は私を緊張させます。(それが起こるはずがないことは知っていますが、とにかく起こるはずのないことは、とにかく発生するという厄介な傾向があります。)代わりにこれを使用します:

matchfiles=(file-3*.jar)
if [ ! -f "${matchfiles[0]}" ]; then
    ...

繰り返しになりますが、bash 拡張機能が当てにならない場合は、どの POSIX シェルでも機能する代替手段を次に示します。

if [ ! -f "$(echo file-3*.jar)" ]; then

複数の一致がある場合、これは失敗する (つまり、ファイルが存在しないかのように振る舞う) ことに注意してください。

于 2012-06-07T19:42:58.167 に答える
0

これは戦略としての答えではありません。いくつかの深刻なログを検討してください。などのメッセージを画面とログ ファイルの両方にエコーしてから、や"[INFO] jar could not be found."の値などの追加のログをログに追加します。次に、顧客/同僚がスクリプトを実行しようとして失敗した場合、ログを電子メールで送信できます。$PWD$SHELL$0

私はおそらく次のようなものを使用します

screenlog() {
    echo "$*"
    echo "$*" >> $LOGFILE
}

log() {
    echo "$*" >> $LOGFILE
}

$LOGFILEスクリプトの先頭で定義します。次に、スクリプトにscreenlog "[INFO] jar could not be found."or などのステートメントを追加しますlog "\$PWD: $PWD"

于 2012-06-07T23:06:39.427 に答える
0

スクリプトは Mac OS X で期待どおりに動作するため、問題は別の場所にあると思います。

$ if [ ! -f file-3*.jar ]; then echo "[INFO] jar could not be found."; fi
[INFO] jar could not be found.
$ touch file-302.jar
$ if [ ! -f file-3*.jar ]; then echo "[INFO] jar could not be found."; fi
$

スクリプトが間違ったシェルで実行されているか、間違った作業ディレクトリで実行されている可能性があります。

于 2012-06-07T17:04:47.187 に答える
0

それがあなたにとってうまくいかないのではなく、あなたのユーザーにとってうまくいかないのですか? OS X のデフォルト シェルは何年にもわたって変更されてきました (この投稿を参照) #!

ユーザーが適切な場所に JAR ファイルを持っていることを確信していますか? おそらく、スクリプトが間違っているのではなく、正しい答えを教えてくれます。スクリプトが実行されている場所に必要なファイルがありません。

于 2012-06-07T17:22:17.990 に答える