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

时间:2010-07-09 03:08:36

标签: shell

我在服务器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)来调用脚本时,我在使用“〜”查找home时遇到了问题(我特意认为是AIX)。另一种选择可能是在我的主目录中创建一个链接并确保它在我的PATH中是第一个,并且只是使用

#!ksh

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

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

2 个答案:

答案 0 :(得分:2)

如路易登记者所说,你可以使用:

#!/usr/bin/env ksh

这可能对您有用。但是,可能存在一些缺点。请参阅Wikipedia on Shebang进行相当详尽的讨论。

答案 1 :(得分:0)

#! /usr/bin/env ksh

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