为什么在向它发送标准输出后我有一个空文件
Why do i have an empty file after sending stdout to it
我正在使用 bash 执行以下命令来过滤证书中的信息
openssl s_client -connect google.com:443 < /dev/null > cert.pem
openssl x509 -in cert.pem -noout -subject > commonName
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' > commonName
最后一条命令使文件 "commonName" 为空,我想知道这是为什么。
如果我改为附加文件“>>”,则会显示所需的过滤输出,但会保留未过滤的内容。
将文件留空
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' > commonName
有效,但有不需要的内容
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' >> commonName
编辑,
可能会添加发送到具有新名称的文件按预期工作。例如,将 "commonName" 更改为 "test"。
提前致谢!
/R
您不能使用其他命令编辑文件并仅在一个管道中使用 sed(您这样做的方式)。您需要一个临时文件:
openssl s_client -connect google.com:443 < /dev/null > cert.pem
openssl x509 -in cert.pem -noout -subject > commonName
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' > /tmp/temp
mv /tmp/temp commonName
以及实现整个脚本的更好方法,无需临时文件:
openssl s_client -connect google.com:443 < /dev/null > cert.pem
openssl x509 -in cert.pem -noout -subject |
tr "," "\n" |
grep -o 'CN .*' > commonName
我正在使用 bash 执行以下命令来过滤证书中的信息
openssl s_client -connect google.com:443 < /dev/null > cert.pem
openssl x509 -in cert.pem -noout -subject > commonName
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' > commonName
最后一条命令使文件 "commonName" 为空,我想知道这是为什么。 如果我改为附加文件“>>”,则会显示所需的过滤输出,但会保留未过滤的内容。
将文件留空
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' > commonName
有效,但有不需要的内容
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' >> commonName
编辑, 可能会添加发送到具有新名称的文件按预期工作。例如,将 "commonName" 更改为 "test"。
提前致谢! /R
您不能使用其他命令编辑文件并仅在一个管道中使用 sed(您这样做的方式)。您需要一个临时文件:
openssl s_client -connect google.com:443 < /dev/null > cert.pem
openssl x509 -in cert.pem -noout -subject > commonName
tr "," "\n" < commonName | sed -nr '/CN/p' | tr -d ' /t' > /tmp/temp
mv /tmp/temp commonName
以及实现整个脚本的更好方法,无需临时文件:
openssl s_client -connect google.com:443 < /dev/null > cert.pem
openssl x509 -in cert.pem -noout -subject |
tr "," "\n" |
grep -o 'CN .*' > commonName