当使用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上执行此操作,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
是,许多命令可以识别“--
选项结束”选项,并将其后面的所有内容作为参数而不是选项:
$ ssh-keygen --help |& grep -- -p
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
man grep
甚至没有提到它,但这是bash
手册中此选项的描述:
A
--
表示选项结束,并禁用进一步的选项处理。后面的所有参数--
均视为文件名和参数。
grep
还提供了第二种处理以“-”开头的模式的方式:该-e
选项将模式作为其自变量,因此以下情况同样可能:
$ ssh-keygen --help |& grep -e -p
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句