我试图将文件解密为标准输出并将其内容通过管道传输到给定的命令。例如,cat
命令,wc
命令等等。但是,我觉得下面的命令可以简化;还有什么想法吗?
echo "openssl enc -aes-256-cbc -in "$(read -p "enter file:" fp && echo \"$fp\")" -k "$(read -s -p "enter passwd:" pswd && echo \"$pswd\")" -d | "$(read -p "enter command:" cmd && echo \"$cmd\")" " | xargs -0 -I{} /usr/bin/bash -c {}
为了完整起见,加密和解密文件的命令,例如:
加密文件(受密码保护)
openssl enc -aes-256-cbc -in in.txt -out out.txt -e
解密文件
openssl enc -aes-256-cbc -in out.txt -k hello -d
当然,我们可以使用任何受支持的密码。
答案1
你让它变得不必要的复杂。您只需要几个方便的功能:
enc () {openssl enc -aes-256-cbc -in "$@"}
dec () {openssl enc -d -aes-256-cbc -in "$@"}
如果您没有提供openssl
密码或密钥,它会提示您输入密码或密钥,这意味着您不必将其构建到命令中。
要加密文件:
enc foo > foo.enc
解密文件:
dec foo.enc
这自然可以通过管道传递给其他命令:
dec foo.enc | wc -l
答案2
从编程的角度来看,您应该将业务逻辑与用户界面分开。只需解密文件并在另一个地方构建选项即可。