authorized_keys
ファイルの一意の行だけが必要なので、次のコマンドの結果をリモートサーバー上のファイルにリダイレクトしたいと思います。
ssh [email protected] awk '!seen[$0]++' /root/.ssh/authorized_keys
私は成功せずに次のことを試しました。
ssh [email protected] "awk '!seen[$0]++' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp"
ssh [email protected] "awk \'!seen[$0]++\' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp"
ssh [email protected] '(awk \'!seen[$0]++\' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp)'
私のGoogleは失敗しています。何が間違っているのかわかりますか?
ベストアンサー1
これを試してみてください(私のコンピュータでテストしましたが、うまく動作しているようです。削除する重複項目はありませんが...)。
ssh [email protected] "awk '!seen[\$0]++' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp"
"
にバックスラッシュがないため、-quote試行が機能しないため、$
拡張$0
されますbash
。
一重引用符を使用した試みは、'foo\'some thing\'foo'
あなたが思うことを意味しないので動作しません。\
- エスケープ文字は、一重引用符で囲まれた文字列内では解釈されません。したがって、これは実際には不均衡引用符と2つの引数です。最初のものは、foo\some
2番目のものですが、最後の引数は単一引用符で囲まれた新しい文字列を開始するthing'foo
ので不完全です。'
シェル脱出は痛みを伴う可能性があり、特に二重脱出はさらにそうです。シェルスクリプトを最初に送信してから(などを使用して)実行する方がsftp
簡単scp
です。