cron 脚本中 shopt 选项的范围

Jef*_*eff 5 bash cron shopt

我有一个 bash 脚本,它在 cron 作业中每晚运行。它需要做不区分大小写的文件匹配,所以脚本调用

shopt -s nocaseglob
Run Code Online (Sandbox Code Playgroud)

我想确保这不会影响其他 cron 脚本。在此脚本结束后,此设置是否仍然存在?还是仅在脚本运行期间启用此设置?

谢谢!

Gil*_*il' 5

设置选项shopt是 shell 设置。它只影响您运行它的 shell 实例:它是 shell 进程和由$(…),(…)和类似构造调用的子shell的本地。它对并发或稍后执行的其他 shell 脚本没有影响,甚至对碰巧从该脚本执行的命令执行的独立 bash 脚本也没有影响。

这同样适用于变量的值和类型,只要它们没有被导出。也可以有一个函数的局部变量;选项始终是全局的,从某种意义上说,如果您在函数中设置它们,它们会在函数返回时保留在原位。

环境变量(即导出变量)、I/O 重定向、资源限制、umask、当前目录和许多其他设置适用于当前 shell 进程以及所有子进程(即该脚本调用的所有命令)。它们也不会逃逸到可能并发执行的无关进程。

  • @TaylorEdmiston 不,`.bash_profile` 仅在登录 shell 中生效。如果您希望它适用于所有交互式 shell,请将其放入“.bashrc”中。请参阅https://unix.stackexchange.com/questions/122187/is-there-a-bash-file-that-will-be-always-sourced-in-interactive-mode-no-matter-i/122188#122188如果您希望它应用于脚本中,则它需要位于脚本本身中。 (2认同)