2

以下のシェル スクリプトを実行すると、入力しているパスワード ファイルが無視されるようです。私は絶えずそれを求められています。入力すると、スクリプトの残りの部分は問題なく実行されますが、cron 経由で実行しているため、ファイルから読み取る必要があります... 何か提案はありますか?

#!/bin/sh
p=$(<password.txt)
set -- $p
pass_phrase=$1
destination="/var/www/d"
cd /var/sl/
for FILE in *.pgp;
do
    FILENAME=${FILE%.pgp}
    gpg --passphrase "$pass_phrase" --output "$destination/$FILENAME" --decrypt "$FILE"
    rm -f $FILE
done
4

4 に答える 4

1

あなたの問題は2行目にあります。

p=$(<password.txt)

ここで行っているのは、サブシェルで「空のコマンド」を実行し、その出力を変数に格納することですp。ただし、やりたいことは、パスワードファイルの内容をに出力するコマンドを実行することですstdout。それで:

p=$(cat <password.txt)

これでうまくいきます。

于 2010-05-03T19:12:45.893 に答える
0

--passphrase本当に存在しますか?マンページによると、そうではありませんが、バージョンが異なる可能性があります。

于 2010-04-28T16:28:23.407 に答える
0

パスワードファイルはどこにありますか?cronが異なりPATHます。これにより、スクリプトを自分で実行したときにスクリプトの動作が異なる可能性があります。

考えられる解決策の1つ、

cd `dirname $0`

スクリプトの上部にあり、cd実行時にスクリプトのディレクトリに配置されます。

考えられる解決策2、絶対パスを使用してファイルを直接指定してみてください。

gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE"
于 2010-04-28T16:38:32.213 に答える
0

おそらく、ファイルへのフル パスを指定する必要があります。または、cron ジョブで、最初にそのファイルを含むディレクトリに移動します。

于 2010-04-28T16:22:42.827 に答える