パイプ(またはサブシェル?)の後にprintfを表示する

パイプ(またはサブシェル?)の後にprintfを表示する

まあ、これは私がどのように解決するかによって異なりますので、質問で洗練するのは難しいです。

次のスクリプトは、3つのパスワードのパスワードを要求するwhileループにmount.cifsコマンドをパイプするように設計されています。注釈付きブロックは、プロンプトに応答しないという事実をデバッグしようとします。

#!/bin/bash

printf "How many atoms are there in the universe?\nAnswer:"
read -s $pwd
echo -e "\nThanks.\n"
while read prompt ; do
#     printf "prompt = $prompt" > /dev/stdout
#     ${prompt//"\n"/"\\n"}
#     printf "prompt is" >foo
    if [ "$prompt" = "Password: " ]; then
    echo -e "$pwd\r\n" > /dev/stdin
    fi
done < <(
    sudo mount.cifs "//192.168.1.2/My Music" /home/pi/Desktop/Music -o     user=Rob_
    sudo mount.cifs "//192.168.1.2/My Videos" /home/pi/Desktop/Videos -o     user=Rob_
    sudo mount.cifs "//192.168.1.2/My Pictures" /home/pi/Desktop    /Pictures -o user=Rob_
)

"prompt"変数が条件を満たしていないようですが、手動で/ dev / stdoutにリダイレクトした後でも、デバッグ出力は飲み込まれます。

誰かが少なくともこの状況でデバッグ情報を印刷する方法を教えてくれれば幸いです。そして、彼らがこの問題を完全に解決する方法(好ましくは私が望む方法を通して)を教えたい場合は、もっと知りたいです。エレガントですね、ぜひ見たいです) では私も感謝します。

編集:記録のために、コマンドに直接パスワードを提供できることを知っています。私はこれを直接テストしていました。

ベストアンサー1

その後、「expect」コマンドを使用してさまざまな角度で問題を解決しました。ただし、次の方法は機能しません。

#!/usr/bin/expect
spawn sudo mount.cifs "//192.168.1.2/My Pictures" /home/pi/Desktop/Pictures -o user=Rob_
expect "Password: " {
    set send_slow {1 .1}
    send -s "a_password"
}

パスワードプロンプトにパスワードを入力すると応答しますが、ドライブがマウントされないため、どこに入力したのかわかりません。 「送信」を使用すると、古いゴミを処理でき、エラーメッセージなしで終了します。一方、シェルからコマンドを入力すると、間違ったパスワードに抗議するか、正常にインストールされます。

ここに答えがない場合は、別の質問にお送りします。

おすすめ記事