何が問題なのかよく分からない。現在、新しくインストールされたKali Linux 2.0を使用しています。以下はUbuntu 14.04で動作しましたが、もう機能しません(誤って変更した可能性がありますか?)。私にとっては正しいように見えますが、実行されるたびにブロックされます。
backup_folder=$(ssh -i /home/dexter/.ssh/id_rsa $server 'ls -t '$dir' | head -1')
これは大きなスクリプトの一部です。 $ serverと$dirが設定されました。コマンドを単独で実行すると、正しい出力が出ますが、接続は終了しません。
答え1
コマンドが中断される理由は完全にはわかりませんが、サーバーでパイプライン全体を実行する必要はありません。そこからすれば十分ですls
。
backup_folder=$( ssh -i keyfile "$server" "ls -t -- '$dir'" | head -n 1 )
これは$dir
リモート側の値を表します(まだローカルに拡張されます)。これはhead
ローカルで実行されます。
これには、「に対する回答に記載されている警告が付属しています。なぜ`ls`を解析しないのですか*(そしてどうすればいいですか?)」。
答え2
私も同じ問題があり、 man ssh を参照して以下を見つけました。
# Problem: if you copy & paste those two lines together into a shell,
# then the second command is not executed.
# But if you run each line on its own, it will work
srcdirs=$(ssh myserver "ls -1 /home")
echo "$srcdirs" # command is also not recorded by history
# Solution: Redirect stdin from /dev/null
srcdirs=$(ssh -n myserver "ls -1 /home")
echo "$srcdirs"
これがあなたの問題を解決することを願っています...
答え3
最近同じ問題が発生しました。おそらく、次のようにコマンドの最後にstdoutのリダイレクトを追加する必要があります。
backup_folder=$(ssh -i /home/dexter/.ssh/id_rsa $server 'ls -t '$dir' | head -1' 2>&1)