関数をローカルで宣言し、SSH接続のリモート側で使用できます。

関数をローカルで宣言し、SSH接続のリモート側で使用できます。

ローカルスクリプトから関数を生成し、SSH接続を介してリモートホストから呼び出したいです。これは可能ですか?

set -e
gitpull () { 
    cd /var/www/html
    STATUS=$((git status) 2>&1)
    echo $STATUS
}

ez ssh two << 'EOSSH'
    gitpull
EOSSH

既定では、次の作業を行う必要があります。コードを複製したくありません。

ez ssh two << 'EOSSH'
    gitpull
EOSSH

ez ssh three << 'EOSSH'
    gitpull
EOSSH

ez ssh four << 'EOSSH'
    gitpull
EOSSH

etc...

ベストアンサー1

ez sshシェル呼び出しを想定します(リモートでも構いません)。SSH提案)標準入力でこのコードを解析し、シェルがスクリプトを解釈したシェルと同じ(同じロケールで実行されている)ksh、bash、またはzsh(サポート用typeset -f)の場合は、次のことができます。これ:

ez ssh two << EOSSH

$(typeset -f gitpull)
gitpull

EOSSH

つまり、関数を呼び出す前に関数を呼び出すシェルに関数定義が渡されますgitpullez sshまたは以下を使用してzsh

ez ssh two << EOSSH
$functions[gitpull]
EOSSH

あるいは、もちろんこれを行うこともできます:

gitpull='
  cd /var/www/html
  STATUS=$((git status) 2>&1)
  echo $STATUS
'
ez ssh two << EOSSH
$gitpull
EOSSH

または

printf '%s\n' "$gitpull" | ez ssh two

別のアプローチは、すでに提案されているようにループを使用するか、次のことを行うことです。

ez_ssh_gitpull() {
  ez ssh "$@" << 'EOSSH'
    cd /var/www/html
    STATUS=$((git status) 2>&1)
    echo $STATUS
EOSSH
}

ez_ssh_gitpull two
ez_ssh_gitpull three

おすすめ記事