2010-07-09 37 views
1

我管理大量的服务器A上每个脚本始于行shell(KSH)脚本......如何标准化shell脚本标题#!在不同的主机上?

#!/usr/bin/ksh 

当我部署到机器B,C和DI经常需要使用不同如/ bin/ksh,/ usr/local/bin/ksh或甚至/ usr/dt/bin/ksh。假设我无法安装ksh的新版本,我无法在任何受保护的目录(例如/ usr/local/bin)中创建链接。目前我有一个修改所有脚本的sed脚本,但我不想这样做。我想标准化标题,以便不再需要从服务器更改为服务器。我不介意使用类似

#!~/ksh 

并创建一个链接,是每一个服务器上,但我曾与发现家里使用RSH当在过去使用“〜”的问题(也许是有人SSH)来调用一个脚本(特别是我认为的AIX)。另一种选择可能是建立在我家目录的链接,并确保它是第一个在我的道路,并简单地用

#!ksh 

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

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

+0

把任何东西永久放在'/ tmp'中是非常非正统的,更不用说容易失败,除非你安排在重新启动时重新创建文件。 – 2011-08-27 04:43:50

回答

2

由于rettops指出,你可以使用:

#!/usr/bin/env ksh 

这可能会为你工作。但是,可能会有一些缺点。请参阅Wikipedia on Shebang进行相当彻底的讨论。

+0

好的谢谢。维基百科文章很有帮助,我认为这不是一个“解决”的问题。我有一些想法。 – 2010-07-09 03:59:40

0
#! /usr/bin/env ksh 

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

+0

当从cron调用脚本时,有没有办法修改默认路径? .profile在这个时候没有被读取,在许多情况下,错误的ksh在我的默认路径 – 2010-07-09 03:39:47

+0

@Ethan Post:在crontab中,作为命令,尝试'PATH = .../path/to/command args ... '。 – Jens 2011-08-25 18:00:00

相关问题