如何退出 ssh 会话中的脚本?

如何退出 ssh 会话中的脚本?

我的脚本包含一个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以减少代码行并使用制表符/空格。

为了让你的命令更具可读性,试试这个

ssh user@host <<'ENDSSH'
  if [ ! -f "test/stuff" ]; then
    echo "File does not exist"
    exit 1
  fi
  echo "File exists"
ENDSSH

来源

相关内容