Вот скрипт, который симметрично шифрует / дешифрует файл двумя последовательными симметричными шифрами.
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "Arguments: enc|dec filename"
exit
fi
E="gpg -o - --symmetric --cipher-algo"
D="gpg -o - --decrypt"
ERR="2>/dev/null"
if [ "$1" = "enc" ]; then
$E AES $2 | $E TWOFISH -
elif [ "$1" = "dec" ]; then
$D $2 ${ERR} | $D - ${ERR}
else
echo "Arguments: enc|dec filename"
exit
fi
Когда я запускаю ./doublecrypt dec /tmp/test.encrypted
я получаю ошибки
usage: gpg [options] --decrypt [filename]
usage: gpg [options] --decrypt [filename]
Если я изменю линию
$D $2 ${ERR} | $D - ${ERR}
в
echo "$D $2 ${ERR} | $D - ${ERR}"
Это печатает
gpg -o - --decrypt /tmp/xenc 2>/dev/null | gpg -o - --decrypt - 2>/dev/null
Если я копирую и вставляю это в bash, он работает правильно.
Так почему же это не сработает, если я уберу echo
и позволю bash-скрипту оценить его напрямую, как в исходном виде?
Я использую Ubuntu Saucy, а bash - моя оболочка.