Так как вы используете скрипт уже, я предполагаю , что вы имеете доступ к Bash - команды read
для чтения ввода переменной, и аналогичную команду zip
к Debian, так что вы могли бы сначала сохранить пароль в переменную $pass
с:
read -rsp "enter password" pass
Где означают варианты (от man bash
или help read
):
-p prompt output the string PROMPT without a trailing newline before
attempting to read
-r do not allow backslashes to escape any characters
-s do not echo input coming from a terminal
Если вы используете более простую оболочку, такую как /bin/sh
/ dash, команда чтения не имеет опции -s
.
Затем заархивируйте файлы с помощью:
zip -j -e -P "$pass" "$f.zip" "$f"
Примечание со страницы руководства zip:
-P password
--password password
Используйте пароль для шифрования записей zipfile (если есть). ЭТО НЕОБХОДИМО! Многие многопользовательские операционные системы предоставляют возможность любому пользователю видеть текущую командную строку любого другого пользователя; даже в автономных системах всегда существует угроза заглядывания через плечо. Хранение открытого текста как части командной строки в автоматическом скрипте еще хуже. По возможности, используйте не повторяющуюся, интерактивную подсказку для ввода паролей. (И там, где безопасность действительно важна, используйте надежное шифрование, такое как Pretty Good Privacy, вместо относительно слабого стандартного шифрования, предоставляемого утилитами zipfile.)
Если вы работаете на своем собственном защищенном компьютере, и за вами никто не наблюдает, то я не буду беспокоиться о потенциальной ненадежности использования такого пароля.
Или вы можете опустить сохранение пароля и параметр -P
zip-файле и позволить zip запросить пароль (дважды) для каждого файла.
Все вместе, запрос пароля когда-то будет выглядеть так:
прочитайте -rsp проход "введите пароль"
# If you don't mind seeing the password, it would be safe to verify it:
echo -e "\nUsing this password: $pass"
read -r -n1 -p "Press any key to continue..."
echo
for f in "$@"
do
zip -j -e -P "$pass" "$f.zip" "$f"
done
Или прочитайте пароль дважды в цикле, пока два пароля не совпадут:
until [ "$pass" == "$pass2" ]; do
read -r -p "Enter password" pass
read -r -p "Enter password again" pass2
done
for f in "$@"
do
zip -j -e -P "$pass" "$f.zip" "$f"
done
Похоже, что была проблема с предположением, что read
bash будет работать, ваш скрипт автоматизатора не работает в обычном терминале, поэтому вы не можете получить его стандартный ввод. Вот некоторые другие идеи, которые могут работать.
Используйте bash, чтобы попросить больше информации
С https://discussions.apple.com/thread/7216062?answerId=28893979022#28893979022
Hiroto Уровень пользователя: Уровень 5 (7,463 очка)
15 сентября 2015 2:57 в ответ на шотландца
Привет
Также вы можете делать все из оболочки. Что-то вроде этого.
#!/bin/bash
ask () {
osascript <<EOF - 2>/dev/null
tell application "SystemUIServer"
activate
text returned of (display dialog "$1" default answer "")
end tell
EOF
}
FROM=$( ask 'Enter value for --from' ) || exit
CREDITS=$( ask 'Enter value for --credits' ) || exit
CAPACITY=$( ask 'Enter value for --capacity' ) || exit
LY_PER=$( ask 'Enter value for --ly-per' ) || exit
trade.py run --from "$FROM" --credits "$CREDITS" --capacity "$CAPACITY" --ly-per "$LY_PER"
С Уважением,
ЧАС
- После того, как у вас работает функция ask, вы можете только запросить пароль (приведенный выше пример выглядит так, будто он запрашивает параметры для запуска python или чего-то еще, все, что вам нужно - это ask).
Запустите весь скрипт в терминале
Если вы можете запустить его в терминале, тогда read
должно работать.
Получить Automator, чтобы попросить вас больше ввода
По всей видимости, этот вопрос на apple.stackexchange.com показывает, что есть способ, позволяющий автомату "Запросить текст" попытаться получить другую переменную.