代码之家  ›  专栏  ›  技术社区  ›  Ethan Post

如何标准化shell脚本头#!在不同的主机上?

  •  1
  • Ethan Post  · 技术社区  · 16 年前

    我在服务器a上管理大量shell(ksh)脚本。每个脚本都以行开始。。。

    #!/usr/bin/ksh
    

    当我部署到机器B、C和D时,我经常需要使用不同的shell,比如/bin/ksh、/usr/local/bin/ksh甚至/usr/dt/bin/ksh。假设我无法安装新版本的ksh,并且无法在任何受保护的目录(如/usr/local/bin)中创建链接。目前我有一个sed脚本,它修改了所有的脚本,但我不想这样做。我想标准化头部,使它不再需要改变从服务器到服务器。我不介意用这样的东西

    #!~/ksh
    

    在每台服务器上创建一个链接,但在过去使用rsh(可能是ssh)调用脚本(我认为是AIX)时,我在使用“~”查找主页时遇到了问题。另一个选择可能是在我的主目录中创建一个链接,并确保它在我的路径中是第一个,并且只需使用

    #!ksh
    

    寻找一个好的解决方案。谢谢。

    更新8/26/11-这是我想出的解决方案。安装脚本查找服务器上安装的各种版本的ksh,然后将其中一个ksh93程序复制到/tmp/ksh93。框架中的脚本都引用了#/tmp/ksh93,它们不需要从一个服务器更改到另一个服务器。该脚本还设置了一些变量,这样,如果每次从/tmp中删除该文件,则下次运行计划任务时(至少每分钟一次)会立即将其放回原处。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mark Eirich    16 年前

    #!/usr/bin/env ksh
    

    这可能对你有用。但是,也有一些缺点。看到了吗 Wikipedia on Shebang 进行一次相当彻底的讨论。

        2
  •  0
  •   rettops    16 年前
    #! /usr/bin/env ksh
    

    将使用用户路径中的任何ksh。