![第二次:尝试让脚本在第一次运行脚本时提示用户输入变量](https://linux22.com/image/12418/%E7%AC%AC%E4%BA%8C%E6%AC%A1%EF%BC%9A%E5%B0%9D%E8%AF%95%E8%AE%A9%E8%84%9A%E6%9C%AC%E5%9C%A8%E7%AC%AC%E4%B8%80%E6%AC%A1%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E6%97%B6%E6%8F%90%E7%A4%BA%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E5%8F%98%E9%87%8F.png)
尝试让 bash 结合 read 和 sed 将变量插入脚本中。不一定非要 sed ,而是类似的东西。
像这样:
INTERNAL="`read -p "PATH " path` | sed -i '3i\$INTERNAL="/run/media/blah" blah.sh
我也可以实现 python。我的项目是用 shell 编写的,但我可以使用setup.py
脚本进行初始运行。
我正在尝试制作一个智能脚本来在第一次运行期间设置变量并保存它们以供将来使用。在本例中,它是用于备份 $HOME 的外部/内部设备的路径。我将使脚本搜索一个文件:($HOME/.already_ran.txt
供脚本搜索的隐藏虚拟文件,以查看它之前是否运行过)如果找不到该文件,它将提示用户输入变量,在本例中的路径。我不想让他们必须手动打开脚本并添加变量。
答案1
#!/bin/bash
conffile=$HOME/.myscript.env
if [[ -f $conffile ]]; then
if ! source "$conffile"; then
printf 'Error parsing configuration file "%s"\n' "$conffile"
exit 1
fi
else
read -p 'Please enter device path: ' devpath
# further steps to verify correctness of $devpath here
# then...
declare -p devpath >"$conffile"
fi
# the rest of the script using "$devpath" goes here
declare -p varname
将输出一个bash
定义变量varname
及其当前值的语句。将其写入文件将为您提供一个文件,您可以使用该文件来重新创建该变量。
对于一个简单的 shell 变量 ,devpath
包含一些路径名/some/path
,写入的内容$conffile
可能类似于
declare -- devpath="/some/path"
if
包装命令的 -语句source
确保如果有人篡改了句法保存的文件,使 shell 无法读取它,脚本将终止。
declare -p
也可用于将环境变量和数组变量等保存到文件中以供以后重建。