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