0

我创建了一个函数来检查远程服务器上是否存在文件,但是当我尝试调用该函数时出现错误“ssh: command not found”。这是功能:

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=”开头的行的行号。

我怀疑这与没有正确引用有关,但我无法弄清楚。我究竟做错了什么?

编辑:感谢 Cfreak 对 PATH 变量名的了解。一旦我修复了我得到了一个不同的错误:

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

经过一些实验,我发现删除转义的单引号可以解决第二个问题。工作线如下所示:

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 回答