获取包含“typeset -r VAR=value”的 shell 脚本

发布于 2024-12-23 12:32:55 字数 645 浏览 2 评论 0原文

的好方法是什么

修改包含“typeset -r VAR=value”

的脚本 A以使脚本可重复(同时维护语句)

?目前,相关脚本在登录时由用户的 .profile 点缀,然后再次由用户从命令行运行的其他脚本点缀。

事实上,脚本在后续运行中将会出错,因为 VAR 已经是只读的。

uname -a: Linux Demon 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

问题更新:

如果注释掉用户的 .profile 脚本在脚本 A 中添加点,然后登录后,脚本 A 中的点的脚本 B 可以一遍又一遍地运行,没有问题。但是,如果您随后从命令行运行脚本 A,则后续调用脚本 B 会出错。

如何解释这种行为?

  • 似乎是因为 .profile 在系统上最大的 shell 中运行,而脚本 B 在临时子 shell 中运行。

它是如何固定的?

  • 如何更新脚本 B,以便在尝试设置 VAR 的值并使 VAR 只读之前检查 VAR 的只读性和值?

What is a good way to modify a script A containing

"typeset -r VAR=value"

to make the script repeatable (while maintaining the statement)?

Currently, the script in question is being dotted in by the user's .profile at login time and then dotted in again by other scripts which the user runs from the command line.

As is, the script will error out on subsequent runs because VAR will already be read only.

uname -a: Linux demon 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

Problem Update:

If you comment out the dotting in of Script A by the user's .profile script, then upon login Script B which dots in Script A can be run over and over with no problem. However, if you then run Script A from the command line, subsequent calls of Script B error out.

What explains this behavior?

  • Appears to be because the .profile runs in the biggest shell on the system while Script B runs in a temporary subshell.

How is it fixed?

  • How can Script B be updated so that it checks for the readonlyness and value of VAR before trying to set VAR's value and making VAR read only?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

所有深爱都是秘密 2024-12-30 12:32:55

你可以这样做:

test -z "${VAR+set}" && typeset -r VAR=value

You could do:

test -z "${VAR+set}" && typeset -r VAR=value
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文