Сценарий оболочки не получает файл пароля ... - PullRequest
2 голосов
/ 28 апреля 2010

Запуск приведенного ниже сценария оболочки, похоже, игнорирует файл пароля, который я передаю. Меня постоянно просят об этом. Если я вхожу в него, остальная часть сценария проходит без проблем, но, поскольку я запускаю его через 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 ]

1 голос
/ 03 мая 2010

Ваша проблема заключается в строке 2:

p=$(<password.txt)

Что вы здесь делаете, это запускаете «пустую команду» в подоболочке, сохраняя ее вывод в переменной p. Что вы, скорее всего, хотите сделать, так это запустить команду, которая выводит содержимое файла паролей на stdout. Итак:

p=$(cat <password.txt)

Это поможет.

0 голосов
/ 28 апреля 2010

Действительно ли --passphrase существует? Согласно справочной странице это не так, но версии могут отличаться.

0 голосов
/ 28 апреля 2010

Где файл пароля? cron имеет другой PATH, что может привести к тому, что скрипты будут вести себя по-разному, когда вы запускаете их самостоятельно.

Возможное решение одно, поставить

cd `dirname $0`

в верхней части скрипта, который будет cd в каталоге скрипта при его запуске.

Возможное решение два, попробуйте указать файл напрямую с абсолютным путем:

gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE"
0 голосов
/ 28 апреля 2010

Возможно, вам нужно указать полный путь к файлу. Или в вашей работе cron, сначала перейдите в каталог, содержащий этот файл.

...