答案1
由于您已经在使用 shell 脚本,我假设您可以访问 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
如果您使用的是更基本的 shell(例如/bin/sh
/dash),则它的读取命令没有该-s
选项。
然后使用以下命令压缩文件:
zip -j -e -P "$pass" "$f.zip" "$f"
来自 zip 手册页的注释:
-P password
--password password
使用密码加密 zipfile 条目(如果有)。这是不安全的!许多多用户操作系统为任何用户提供了查看其他用户当前命令行的方法;即使在独立系统上,也总是存在被偷看的威胁。将明文密码作为命令行的一部分存储在自动脚本中甚至更糟糕。尽可能使用无回显的交互式提示输入密码。(如果安全性确实很重要,请使用强加密(如 Pretty Good Privacy),而不是 zipfile 实用程序提供的相对较弱的标准加密。)
如果您使用自己的私人安全计算机并且没有人监视您,那么我不会担心使用此类密码的潜在不安全性。
或者您可以省略密码存储和 zip 的-P
选项,让 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
似乎假设 bashread
可以工作存在问题,您的自动程序脚本未在常规终端中运行,因此您无法获取其标准输入。以下是一些可能可行的其他想法。
使用 bash 请求更多输入
从https://discussions.apple.com/thread/7216062?answerId=28893979022#28893979022
Hiroto 用户等级:5级(7,463分)
2015 年 9 月 15 日 上午 2:57 回应 Scotsman
你好
你也可以通过 shell 来做任何事情。就像这样。
#!/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"
问候,
H
- 一旦您让 ask 函数工作起来,您就只需要询问密码(上面的例子看起来像是要求输入参数来运行 python 或其他东西,您所需要的只是 ask)。
在终端中运行整个脚本
如果您可以在终端中运行它那么它read
应该可以工作。
让自动化程序要求您输入更多内容
显然apple.stackexchange.com 上的这个问题看起来有一种方法可以让自动程序“询问文本”尝试获取另一个变量。