BASH:対話型シェルを使用してリモートホストでローカル機能を宣言する

BASH:対話型シェルを使用してリモートホストでローカル機能を宣言する

ここに文を書くことができて嬉しいです。これについてたくさん検索しましたが、まだ解決策が見つかりませんでした。私がしたいことは比較的簡単です。

私のワークステーション環境のローカルbash機能に関する警告があります。

function caveat(){
  echo "function main caveat executing in $HOSTNAME"

  function caveat_a(){
    echo "function caveat_a executing in $HOSTNAME"
  }

  function caveat_b(){
    echo "function caveat_b executing in $HOSTNAME"
  }
}

リモートホストでいくつかの怠惰なシステム管理タスクを実行するために、リモートホスト(対話型シェル)でSSHを実行したいと思います。 caveat_aまたはcaveat_b関数を実行する必要がある場合は、リモートホストからその関数を呼び出すことができるようにしたいです。

私の研究では、リモートで利用可能なローカル関数を宣言してから直接実行することができます...私はうまくいきます。しかし、私に必要なのは宣言し、インタラクティブシェルに入ることです。

最後の試みは、次のように行の末尾に「bash --login」を含めることでした。

username@localhost ~ $ caveat
function main caveat executing in localhost
username@localhost ~ $ caveat_a
function caveat_a executing in localhost
username@localhost ~ $ caveat_b
function caveat_b executing in localhost
username@localhost ~ $
username@localhost ~ $ ssh username@remote_host -t "$(declare -f caveat); caveat; caveat_a; bash --login"
Are you sure you want to continue connecting (yes/no)? yes
username@remote_host's password: 
function main caveat executing in remote_host
function caveat_a executing in remote_host
username@remote_host ~ $ #nice, it executed those caveat functions as echoed above

..それが私と対話するように..だからそこから別のコマンドを実行することができます..しかし私が押されたときに'caveat<TAB><TAB>'警告はまだ宣言されていません。

何か抜けていると思います。あなたのすべての助けと答えに事前に感謝します。

可能であれば、できるだけ単純な(期待なし、他のバイナリなし)単純なソリューションを使用することをお勧めします。

ありがとう

ベストアンサー1

この試み:

ssh -t user@host "$(declare -f caveat); export -f caveat; exec bash -li"

素晴らしいアドバイスをいただいた@Scottに感謝します。

-t対話型シェルが端末機能へのフルアクセスを許可するには、sshオプションが必要です。

exec bash -li対話型ログインシェルを起動します。関数をエクスポートしたので、この新しいシェルで使用できます。

おすすめ記事