2つのbashスクリプトがあり、main.sh
1つはutil.sh
。utils.sh
今SSHを介して実行したいと思います。明らかにこれはうまくいきません。main.sh
. util.sh
main.sh
SSHユーザー@ホスト "bash /dev/stdin < main.sh"
リモートシェルが見つからないため、リモートシステムにコピーせずにutil.sh
どうすればよいですか?util.sh
答え1
util.sh
展開する方がより良い信頼性の高いソリューションだと思いますが、次のことを行うことhost
ができます。main.sh
#!/bin/bash
U=$(mktemp)
cat > "$U"
. "$U"
rm -f "$U"
# rest of script
その後実行
ssh user@host main.sh < util.sh
セキュリティを強化するには、main.sh
書き込み/削除不可能、入力転送なしstdin
などの一時ファイルを処理するための追加のコーディングが必要になる場合があります。
答え2
これは醜いですが動作するはずです。
ssh user@host bash < <(sed 's/\. util\.sh/ {r util.sh; d}' main.sh)
これにより、utilスクリプトの内容がデフォルトスクリプトに含まれ、リモートホストで実行されているbashプロセスにリンクされます。二重引用符を削除しました。プロセスの交換は、両方のファイルがあるローカルコンピュータで実行する必要があります。