2010-07-09 43 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

相關問題