1

我正在尝试将 的当前状态保存shopt globstar到一个变量中,以便在需要时可以更改它,然后将其设置回来,以免改变用户的环境。

我尝试过以多种方式存储命令输出,例如var=$(command)andvar=`command`但是当我用它进行测试时, echo $var即使它不是,它总是将状态读取为“关闭”。

gstar=$( shopt globstar )
echo "$gstar"

我希望使用 echo 来测试当前状态以防止手动运行shopt globstar,但它们不匹配。

这个基本的变量存储在whoami命令中运行良好。

4

2 回答 2

3

您是直接运行脚本(./script.sh)还是采购它(. script.shsource script.sh)?

  1. 如果您直接运行它,它将拥有自己的环境,您不必担心保留用户的设置。脚本获取用户环境的副本,更改只影响副本,而不影响原始环境。只需在脚本顶部设置您喜欢的选项即可。

    #!/bin/bash
    
    shopt -s globstar
    foo **/bar
    
  2. 如果它是被采购的,那么将脚本的相关部分包装在一个子shell中会容易得多,这样它们就可以在一个隔离的环境中运行。

    (
        shopt -s globstar
        foo **/bar
    )
    baz
    

我怀疑是第一种情况,因为你说它总是开始off

于 2019-02-05T13:18:52.757 回答
2

要保存 shopt 值:

if shopt -q globstar
then
  # the option is enabled
  saved_globstar=-s
else
  # the option is disabled
  saved_globstar=-u
fi

现在您可以更改您的 globstar 值。如果您以后想将其恢复到以前的状态,请执行

shopt $saved_globstar globstar
于 2019-02-05T13:34:23.650 回答