我看过以下概括的包装器脚本示例: #!/bin/bash myprog=sleep echo "This is the wrapper script, it will exec "$myprog"" exec "$myprog" "$@" 如上所示,它们用于exec几乎立即用替换新创建的外壳$myprog。如果没有exec以下内容,则可以实现相同的目的: #!/bin/bash myprog=sleep echo "This is the wrapper script, it will exec "$myprog"" "$myprog" "$@" 在最后一个示例中,启动了一个新的bash实例,然后$myprog将其作为bash实例的子进程启动。 第一种方法的好处是什么?
有没有办法动态选择正在执行脚本的解释器?我有一个在两个不同系统上运行的脚本,并且我要使用的解释器位于两个系统上的不同位置。我最终必须要做的是每次切换时都更改hashbang行。我愿做一些事情,是合乎逻辑的该等效(我知道这个确切的结构是不可能的): if running on system A: #!/path/to/python/on/systemA elif running on system B: #!/path/on/systemB #Rest of script goes here 甚至更好的是,它尝试使用第一个解释器,如果找不到,则使用第二个: try: #!/path/to/python/on/systemA except: #!path/on/systemB #Rest of script goes here 很显然,我可以代替执行它 /path/to/python/on/systemA myscript.py 还是 /path/on/systemB myscript.py 取决于我在哪里,但我其实有一个包装脚本启动myscript.py,所以我想以指定Python解释器编程而不是手工的路径。