Я создал функцию проверки наличия файла на удаленном сервере, но я получаю сообщение об ошибке «ssh: command not found» при попытке вызвать функцию , Вот функция:Функция bash «команда не найдена»
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
Значение 'х' в ошибке - номер строки строки в функции, начинающейся с «FILE_EXISTS =».
Я подозреваю, что это связано с неправильным цитированием, но я не могу понять это. Что я делаю не так?
EDIT: Благодаря Cfreak для хорошего улова по имени переменной PATH. После того, как я установил, что я получил другую ошибку:
bash: find <MYPATH> -name "<FILE>": No such file or directory
После нескольких экспериментов я обнаружил, что удаление сбежавших одиночные кавычки закрепил 2-й выпуск. Рабочая линия выглядит следующим образом:
FILE_EXISTS=$(ssh "$SERVER" find "$MYPATH" -name \""$FILE"\")
Вы пытались использовать полный путь i.e./ usr/bin/ssh? – ghm1014
Не связанный с вопросом, но вы должны поместить '$ FILE_EXISTS' в двойные кавычки, так как он может содержать пробелы. – Barmar
Не связанный, но используйте '$ (ssh ...)' вместо обратных запросов. Это намного безопаснее и гнездо ... – jm666