繁体   English   中英

bash函数“找不到命令”

[英]bash function “command not found”

我已经创建了一个函数来检查远程服务器上是否存在文件,但是当我尝试调用该函数时,出现错误“ 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 =”开头的行的行号。

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

编辑:感谢Cfreak对PATH变量名的好习惯。 修复后,我得到了另一个错误:

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

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

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

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
}

尝试这个。 (为了方便键入,我已将_切换为-,将$切换为``,但这不是必需的)

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)" ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM