[英]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.