ローカルスクリプトから関数を生成し、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
つまり、関数を呼び出す前に関数を呼び出すシェルに関数定義が渡されますgitpull
。ez 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