bash - 如何在shell脚本中记住用户输入?

标签 bash shell

我的 shell 脚本中有用户设置。我怎样才能要求用户输入并记住它?在示例中我有代码:

ALTERNATEMEMORY="false"

我需要询问用户输入(在“配置”模式下运行脚本时):

echo "Use alternate memory?"
select yn in "true" "false"; do
    case $yn in
        Yes ) [permament save ALTERNATEMEMORY as "true"];;
        No ) [permament save ALTERNATEMEMORY as "false"];;
    esac
done

脚本应如上所述询问用户,读取他的输入,并根据选择将ALTERNATEMEMORY设置为相应的状态。下次运行脚本(不是配置,只是运行)时,它应该记住该设置。我应该在这些方括号中放入什么?

如果我在发布问题时犯了错误,请原谅我 - 这是我第一次使用 stackoverflow。

最佳答案

从一次运行到下一次运行(即使在重新启动后)记住设置的标准方法是使用配置文件。对于系统范围的设置,这些配置文件通常位于 /etc 中,并且可以命名,例如 /etc/myprog.conf。对于特定于用户的设置,该文件通常位于主目录中,名称以 . 开头,例如 $HOME/.myprog.conf。选择这些路径之一并创建配置文件:

echo "ALTERNATEMEMORY=false" >path/myprog.conf

现在,让脚本的配置部分根据需要更新该文件:

echo "Use alternate memory?"
select yn in "true" "false"; do
    case "$yn" in
        true)
           sed -i '/ALTERNATEMEMORY/ s/.*/ALTERNATEMEMORY=true/' path/myprog.conf
           break
           ;;
        false)
           sed -i '/ALTERNATEMEMORY/ s/.*/ALTERNATEMEMORY=false/' path/myprog.conf
           break
           ;;
    esac
done

在上面,我们使用 sed -i 就地更新文件。这适用于 Linux。如果您使用的是 BSD 系统 (OSX),那么您需要向该命令添加两个引号,例如 sed -i ""...

用任意字符串进行替换

如果我们想要将 ALTERNATEMEMORY 设置为值 $sel,其中 sel 是包含任意字符的 shell 变量,那么我们需要在进行替换之前逃脱它们。这可以做到as follows (假设 shell 是 bash):

escaped_sel=$(sed 's/[&/\]/\\&/g' <<< "$sel")
sed -i "/ALTERNATEMEMORY/ s/.*/ALTERNATEMEMORY=$escaped_sel/" path/myprog.conf

关于bash - 如何在shell脚本中记住用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33951886/

相关文章:

c++ - 在 C++ 中获取非终止 Linux shell 执行的输出

bash - 让ssh在目标机器的后台执行命令

image - 用于删除小图像的 Bash 脚本

Linux bash 脚本 - For 循环问题

linux - 如何等待命令的特定输出字符串并执行另一个命令

linux - Bash脚本,请帮我制作一下

bash - 如何在执行前打印每个命令?

Bash 脚本在 Ctrl+C 上杀死背景(孙)子

linux - 使用特定的击键从 GUI 启动选择菜单(BASH 脚本)

android - 获取 adb shell 命令的结果代码