bash函数“找不到命令”

时间:2013-06-28 22:44:28

标签: bash function

我已经创建了一个函数来检查远程服务器上是否存在文件,但是我收到了错误" 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"\")

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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)" ]
}