Мой скрипт содержит ssh
команду для входа на удаленный сервер и выполнения нескольких команд. Команда проверяет, существует ли файл, и если нет, то он должен выйти из всего скрипта.
ssh $user@$hostname "if[ -f $filename];then
echo"file exists Proceeding next steps;
else
"echo file doesn't exist";
exit 1;
fi"
Однако указанная выше команда выполняется успешно, если файл присутствует. Но в противном случае, если файл не существует, команда выхода просто завершает сеанс ssh.
Он по-прежнему продолжает выполнять другие команды в скрипте, а не завершает скрипт.
Пожалуйста, помогите мне своими предложениями.
решение1
Чтобы выполнить скрипт с помощью ssh, которому необходимы определенные переменные, заданные заранее, например, ваш $filename
, выполните следующие действия:
ssh user@host 'bash -s' < local_script.sh "$filename"
Содержимое local_script.sh:
#!/bin/bash
[ $# -ne 1 ] && echo '$0 needs at least 1 parameter' 1>&2 && exit 2
filename="$1"
if [ ! -f "$filename" ]; then
echo "[ $filename ] does not exist"
exit 1
fi
echo "[ $filename ] exists"
Если вам не нужны никакие передаваемые переменные в выполняемой команде, то это работает:
ssh user@host '
if [ ! -f "test/stuff" ]; then
echo "File does not exist"
exit 1
fi
echo "File exists"
'
Обратите внимание на одинарные кавычки '
, они мешают вашей команде бытьрасширенный.
Также я проверил отсутствие $filename
first, чтобы сократить количество строк кода и использовать табуляции/пробелы.
Чтобы сделать вашу команду более читабельной, попробуйте это
ssh user@host <<'ENDSSH'
if [ ! -f "test/stuff" ]; then
echo "File does not exist"
exit 1
fi
echo "File exists"
ENDSSH