grep
またはegrep
を使用して--help
パラメータを指定したプログラムからの出力を検索すると、一致する行の代わりに完全な出力が出力されます。
例:
ssh-keygen --help | grep "known_hosts"
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
// etc
ssh-keygen --help | grep "-p"
などのパラメータを検索すると、grepはこのパラメータをそれ自体で認識します。ダッシュ(grep "\-p"
)をエスケープしても効果がありません。
例:
ssh-keygen --help | grep "-p"
grep: invalid option -- 'p'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
これを解決するには?助けてくれてありがとう!
ssh-keygen
コマンドには--help
オプションがないため、「不明なオプション」エラーを出力し、「RTFM」と表示せずにヘルプを出力します。これはstdoutではなくstderrで行われます。これは|
でパイプされず、|&
(これはbash
2>&1 |
の省略形):
$ ssh-keygen --help |& grep "known_hosts"
ssh-keygen -F hostname [-f known_hosts_file] [-l]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
まったく異なる問題は、ハイフンで始まるため、grep
が検索式をオプションとして認識することです。幸い、grep
は、「オプションの終わり」の--
オプションを認識し、その後ろにあるすべてのものをオプションではなく引数として受け取る多くのコマンドの1つです。
$ ssh-keygen --help |& grep -- -p
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
man grep
には触れられていませんが、bash
マニュアルのこのオプションの説明は次のとおりです:
--
はオプションの終わりを示し、それ以降のオプション処理を無効にします。--
の後の引数は、ファイル名と引数として扱われます。
grep
は、「-」で始まるパターンを処理する2番目の方法も提供します。-e
オプションは、引数としてパターンを使用するため、次のことも可能です。
$ ssh-keygen --help |& grep -e -p
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
探しているものがssh-keygenコマンドのヘルプである場合
man ssh-keygen | grep known_hosts
または、man ssh-keygen
コマンドラインから、次に / そして、「kno」などの検索用語を入力し、 Enter、 使用する n 検索語の次のインスタンス(man man
man
)の使用に関する詳細情報。 man
検索は下方向にしか検索しないことに注意してください。したがって、 PgUp または Home 新しい検索を開始する前に、手動エントリの先頭に戻ります。
存在しないオプションを指定してssh-keygen
を呼び出します。これはエラーであり、エラー出力はstderrに表示されます。 ssh-keygen
がその使用法を出力するための通常のオプションを持っているように見えません:ある場合(GNUプログラムが--help
をデフォルトで持つなど)、その「通常」出力はstdoutに表示され、使用したパイプのlessにアクセスできます。
ssh-keygen --help 2>&1 | grep -e "-p"
を使用すると、この問題を回避できます。2>&1
はstderrをstdoutにリダイレクトし、パイプがそれをキャッチできるようにします。grepのオプションとしての-e
は、「次は正規表現を使用してオプションのように見える場合」.
man ssh-keygen
は、使用量を取得するために適切に機能し、デフォルトでless
にパイプして、/
を使用して正規表現を検索できます。通常、コンテキストでの読み取りがより良い選択です。