【问题标题】:How can I standardize shell script header #! on different hosts?如何标准化 shell 脚本头 #!在不同的主机上?
【发布时间】:2011-08-27 12:06:59
【问题描述】:

我在服务器 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)时,我在使用“~”查找主页时遇到了问题。另一种选择可能是在我的主目录中创建一个链接并确保它位于我的 PATH 中的第一个,并且只需使用

#!ksh

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

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

【问题讨论】:

  • /tmp 中放置任何永久的东西是...非常不正统的,更不用说容易失败,除非您安排在重新启动时重新创建文件。

标签: shell


【解决方案1】:

正如 rettops 所述,您可以使用:

#!/usr/bin/env ksh

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

【讨论】:

  • 好的,谢谢。维基百科文章很有帮助,我认为这不是一个“已解决”的问题。我有一些想法。
【解决方案2】:
#! /usr/bin/env ksh

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

【讨论】:

  • 从cron调用脚本时有没有办法修改默认路径?此时未读取 .profile,在许多情况下,我的默认路径中存在错误的 ksh
  • @Ethan Post:在 crontab 中,作为命令,尝试PATH=... /path/to/command args ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多