期待どおりに送信されたstdinをリダイレクトする方法はありますか?以下の私の例では、シェル関数内にheredocを介して別のシェルスクリプトをパイプし、それをシェル変数に取り込むことで出力を抑制したいと考えています。リダイレクトはstdinが呼び出しを呼び出すのを期待します
psshstdin() {
local user=$1 pass=$2 hosts=$3
out=$(expect -c '
set timeout 15
spawn pssh -i -h '"$hosts"' -p 100 -l '"$user"' -A -o ./ -x-oStrictHostKeyChecking=no <EXPECT_STDIN_HERE
expect "assword:" { send '\""$pass\r\""' }
interact
'<<EOF
echo "hello"
echo "world"
EOF
)
}
SOLUTION:私はそうすぐに自分の質問に答えるために十分評判ポイントを持っていないので、私はここにこれを投稿していました。
this issueと同じ技術を試して解決できました。そのソリューションは当初は当てはまるとは思っていませんでしたが、そうでした。作業コードを以下に示します。
psshstdin() {
local user=$1 pass=$2 hosts=$3
out=$(expect -c '
set timeout 30
spawn pssh -I -h '"$hosts"' -p 100 -l '"$user"' -A -o ./ -x-oStrictHostKeyChecking=no
while {[gets stdin line] != -1} {
send "$line\n"
}
send \004
expect "assword:" { send '\""$pass\r\""' }
expect {
"END_TOKEN_OF_SCRIPT" {
exit 0
}
default {
exit 1
}
}'<&0)
}
私のようなものでそれを呼び出すことができます。STDINを集める期待してみましょう:あなたはstdin=$(cat -)
アップデートで変数に標準入力をキャプチャすることができ
psshstdin myusername mypassword ssh_hosts_file<<EOF
echo "hello"
echo "world"
EOF
解決策が見つかりました[ここ](http://stackoverflow.com/questions/10237872/expect-redirect-stdin)。 – user1387661