Bash环境变量等同于-x?
我有一堆脚本,我正在调试,所有嵌套和非常讨厌.
只是想知道我是否能够设置一些相当于bash的-x选项的环境变量.这将节省我惊人的时间. 我已经找到了答案,但似乎它不存在 – 希望你聪明的人可能能够提供建议,或者可能是另一种解决方案. 谢谢! 解决方法
因为你似乎陷入了困境,我会建议一些可怕的选择(一个选项听起来很可怕,但并不是那么糟糕).
首选:使用不同的工具. strace(1)和ltrace(1)都可以提供一系列惊人的信息 – 尽管两者都不了解shell变量,它们将向您展示脚本如何与系统的其余部分以及某些内部状态进行交互.该程序.这可能已经足够了. (如果你是strace(1)的新手,请尝试strace -f -o / tmp / foo ./program – 它将跟随fork(2),vfork(2)和clone(2)调用,所以孩子进程也被跟踪并转储.输出转到/ tmp / foo.) 第二种选择:在所有脚本中用#!/ bin / bash -x替换所有#!/ bin / bash: find . -type f -print0 | xargs -0 sed -i -e 's/^#!/bin/bash$/#!/bin/bash -x/' 也许有更好的机制来替换所有脚本上的shebang线,但这感觉还不错.在通过脚本调用的C程序中,它会错过system(3),popen(3)等的所有用法,但这可能就好了.如果任何脚本依赖于/ bin / bash的参数,您可能需要更加努力地正确添加-x. 最后一个选择:以root身份启动sash(1)shell.将/ bin / bash复制到/bin/real.bash.编写一个快速而简单的C程序,它将-x添加到/bin/real.bash的命令行参数中,并将其放入/ bin / bash中.这将获得一切:每个系统(3),每个popen(3),每个init脚本,所有cron作业,所有用户登录,一切. 你可以稍微修改那个最后的选择; Linux内核提供了每个进程的私有命名空间,可用于使新的/ bin / bash对给定进程的子进程可见.这有点复杂…… >复制bash:cp / bin / bash /bin/real.bash 当最后一个(宏)*子进程终止时,私有命名空间和有趣的绑定挂载也会消失. 所有这些有趣的业务的结果是所有的shell脚本都保持不变,你可以使用你认为最有用的调试工具.如果你恰到好处地眯着眼睛,那就不是很干扰了. 我在我的工作站上执行了很多这些步骤(除了我使用了–make-rshared和–make-rslave,并用/ bin / dir和/ bin / ls而不是/ bin / bash测试),并检查了inode在新命名空间内和新命名空间外的shell中使用ls -li / bin / dir / bin / ls编号,并且命名空间外的进程继续看到inode编号保持不变,但命名空间内的进程看到dir和ls共享inode编号. 有关命名空间,专用安装和绑定安装的完整详细信息,我建议从内核源代码树,clone(2)手册页,unshare(1)手册页和mount(8)手册页中读取 绑定坐骑会因系统重启而消失,因此您无法将任何东西搞得太紧张. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 无法使用boot2docker连接到作为容器运行的redis
- 是否有支持OAuth 2.0的Scala OAuth库?
- docker-具有–net = host的Cassandra容器立即退出
- 10个值得推荐的服务器监控软件
- `exit $?`与bash中的`exit`有意义不同?
- 如何在我的本地主机上运行时让Docker容器相互通信?
- WebService的Sesinon保存利用的是Cookie
- 自己理解的webservice (2012-05-22 15:53:18)
- sbt – 如何克服“有1个功能警告;重新运行-features以获取详
- angularjs – 如何使用ng-repeat显示单个对象数据?