Shell - 使用带有ccrypt的环境变量

时间:2012-07-23 21:49:43

标签: linux bash shell

我在使用名为'ccrypt'的程序时遇到问题,该程序用于加密文件。我使用它的方式如下:

ccrypt -e -E $cryptograph `find . -type f | sed -n -e '$i{p;q}'`

其中-e表示程序在加密模式下运行。我的问题如下:

该命令的手册说-E用于使用以下语法从环境变量中读取加密的密码:

-E var

因此我将它设置为我想要的密码如下:

cryptograph="Example_passphrase"

但是,当我运行如上所示的代码时,会出现如下错误消息:

  

ccrypt:环境变量Example_passphrase不存在。

有人知道我做错了吗?

编辑: 感谢您的答案,导出变量并删除“$”,但现在我遇到了一个新问题:

"sed -n -e '$i{p;q}'"

shell说:

  

ccrypt:{p; q}:没有这样的文件或目录

但是,如果我用$ i换取一个数字,那么程序就可以了。在这里使用变量'i'的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

不要忘记导出环境变量(在导出之前,它只是一个变量,而不是环境变量)。

export cryptograph="Example_passphrase"
ccrypt -e -E cryptograph `find . -type f | sed -n -e '$i{p;q}'`

仅指定名称至关重要(无$)。否则,变量的值 - 密码本身 - 在命令行参数中,对ps等可见。我们可以讨论环境是否安全(想想/proc文件系统),但是它比在命令行中包含密码本身要好几步。


从评论中看来,你可能最好做一些像:

find . -type f -exec ccrypt -e -E cryptograph {} ';'

这样做的一个主要优点是它可以回避文件名中空白和其他奇数球的所有问题。如果ccrypt命令接受多个文件,您可以将引用的';'替换为+(不需要引号),并且单个命令将加密所有文件。

答案 1 :(得分:1)

只需使用变量的名称作为参数,而不是其值:

ccrypt -e -E cryptograph `...`