如何退出 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

來源

相關內容