bash
  • shell
  • whitespace
  • gnupg
  • 2014-11-25 5 views 0 likes 
    0

    По сути, я пытаюсь сделать это с помощью пакетного gpg-шифрования файлов с пробелами в именах файлов, а мои кавычки уходят.gpg шифрование файлов с помощью

    Вот код:

    #!/bin/sh 
    
    input_path="/opt/ftp_dirs/upload/*.*" 
    archive_path='/opt/archives' 
    encrypt_path='/opt/archives/encrypted' 
    
    for encrypted in $input_path; do 
        decrypted="$encrypted`date +%Y%m%d%N`.gpg" 
        echo "$encrypted" 
        /usr/bin/gpg --batch --no-tty --yes --output $decrypted --recipient [email protected] --passphrase password --encrypt $encrypted 
    done 
    exit 
    

    Что хорошо для файлов без каких-либо пробелов.

    Являются ли мои кавычки отключены? Есть лучший способ сделать это?

    ответ

    1

    При обращении к переменным, если вы используете кавычки (например "$decrypted"), содержание не интерпретатором и передается буквально в команду в качестве единственного параметра.

    Если вы не используете кавычки (например, просто используя $decrypted, как и вы), содержимое интерпретируется оболочкой, что означает, что пробелы создают несколько параметров для команды.

    Используйте кавычки при ссылках на переменные, так что оболочка не интерпретирует их и пробелы в пути уважают, как вы хотите:

    /usr/bin/gpg --batch --no-tty --yes --output "$decrypted" --recipient [email protected] --passphrase password --encrypt "$encrypted" 
    
    +0

    Я клянусь фасолью я дважды процитировал эти две вещи. Спасибо! Это сработало. – JLLouthan

    0

    Обязательно укажите "$encrypted" и "$decrypted".

    gpg --batch --no-tty --yes --output "$decrypted" --recipient [email protected] --passphrase password --encrypt "$encrypted" 
    
    Смежные вопросы