SSH経由でネストされたローカルbash機能を実行する

SSH経由でネストされたローカルbash機能を実行する

他の関数などを使用する複数の関数を宣言するこのようなスクリプトがあります。

#!/bin/bash

function a {
    ...
}

function b {
    ...
    a
    ...
}

...

別のスクリプトはこのスクリプトの一部の機能を使用します。

#!/bin/bash

do_something

source "/path/to/functional/script"

ssh user@host "$(typeset -f f_from_that_script); f_from_that_script"
...

それが言う問題は、environment: line N: another_f_from_that_script: command not found最初の関数が2番目の関数を内部的に使用することを意味します。

function f_from_that_script {
    ...
    another_f_from_that_script
    ...
}

SSHを介して実行できるように、これらすべての機能を定義する方法はありますか?

ベストアンサー1

いいえ、bashのパーサーはこれらの詳細な構文解析は不可能です(呼び出した関数の名前を実行時に計算できるため、しばしば不可能です)。私が知る限り、これを行うことができるサードパーティパーサーはありませんが、すべての場合にこれが理論的に不可能な理由を説明する論文があります。私は書いた回答それについて。

個々の機能を渡すのではなく、すべての機能を含む完全なスクリプトを実行することをお勧めします。 scpを介してスクリプトを一時的な場所にコピーし、sshを介してコピーするか、sourcesshを介してスクリプト全体をstdinにパイプすることでこれを実行できます。

定期的にSSHを介して複雑な機能を実行する必要がある場合は、SSHなどのより強力で正式なリモート管理ツールを使用できますansible

おすすめ記事