0

リモート サーバー上のファイルの存在を確認する関数を作成しましたが、関数を呼び出そうとすると「ssh: コマンドが見つかりません」というエラーが表示されます。関数は次のとおりです。

remote_file_exists() {
    local SERVER="$1"
    local PATH="$2"
    local FILE="$3"
    FILE_EXISTS=`ssh "$SERVER" \'find "$PATH" -name \"$FILE\"\'`
    if [ -z $FILE_EXISTS ]; then
        return 1
    else
        return 0
    fi
}

私は次のように関数を呼び出しています:

if ( remote_file_exists $REMOTE_SERVER "$REMOTE_PATH/" $REMOTE_FILE ); then
    echo "$REMOTE_PATH/$REMOTE_FILE exists on $REMOTE_SERVER"
...

私が得ているエラー:

myscript.sh: line x: ssh: command not found

エラーの「x」の値は、「FILE_EXISTS=」で始まる関数内の行番号です。

これは正しく引用していないことと関係があると思われますが、わかりません。私は何を間違っていますか?

編集: PATH 変数名をうまくキャッチしてくれた Cfreak に感謝します。別のエラーが発生したことを修正したら:

bash: find <MYPATH> -name "<FILE>": No such file or directory

いくつかの実験の後、エスケープされた単一引用符を削除すると、2番目の問題が修正されることがわかりました。作業行は次のようになります。

FILE_EXISTS=$(ssh "$SERVER" find "$MYPATH" -name \""$FILE"\")
4

2 に答える 2

1

PATHは、bash がコマンドを見つけてリセットする場所を制御する変数です。PATH変数名を変更します。

remote_file_exists() {
    local SERVER="$1"
    local MYPATH="$2"
    local FILE="$3"
    FILE_EXISTS=`ssh "$SERVER" \'find "$MYPATH" -name \"$FILE\"\'`
    if [ -z $FILE_EXISTS ]; then
        return 1
    else
        return 0
    fi
}
于 2013-06-28T22:47:09.627 に答える
0

これを試して。(入力しやすいように _ を - に、 `` を $() に切り替えましたが、必須ではありません)

remote-file-exists () 
{ 
    local SERVER="$1"
    local MYPATH="$2"
    local FILE="$3"
    local FILE_EXISTS="$(ssh "$SERVER" find "'$MYPATH'" -name "'$FILE'" -print)"
    if [ -z "$FILE_EXISTS" ]; then
        return 1
    else
        return 0
    fi
}

これを大幅に短縮できます。また、ローカル変数は通常、それらが環境変数であることを暗示するのを避けるために小文字化されます。

remote-file-exists () 
{ 
    local server="$1" mypath="$2" file="$3"
    [ ! -z "$(ssh "$server" find "'$mypath'" -name "'$file'" -print)" ]
}
于 2013-06-28T23:25:09.853 に答える