2010-11-17 66 views

回答

6

這會給你的路徑,Korn shell中:

which ksh 

,這將在所有shell腳本替換家當:

sed -i 's/#!\/bin\/bash/#!insert escaped ksh path here/' *.sh 
+1

值得注意的是他需要跳過他插入的字符串。更好的是,我想最好使用如下形式:'echo 1/23 | sed's ^/^ 2 ^''。另外,你不需要'/ g',因爲它希望每行只有一個...:) – 2010-11-17 14:55:14

3

在每個文件的第一行將這個(家當線):

#!/usr/bin/env ksh

如果需要更換,你可以使用SED/AWK: find -name '*.sh' | xargs perl -pi -e "s{^#!/usr/bin/sh}{#!/usr/bin/env ksh}"

+0

什麼是那個流浪'-o'? – 2010-11-17 17:50:41

+0

刪除它。它來自我發現的那個尋找.pl和.cgi文件的snippit。感謝您的支持。 – 2010-11-17 18:20:50

3

找出ksh的生活:

whence -a ksh 

改變所有shell腳本在當前目錄使用KSH:

這將匹配shbash並保留任何後來出現的空格(和參數)。它只作用於第一行,因此它不會觸及文件後面可能出現的類似行。

替換ksh可執行文件的實際位置或使用/usr/bin/env ksh

如果要備份更改的文件,請使用sed -i .bak

0

這個命令會找到您的UNIX環境Korn shell中可執行文件:

which ksh 

如果沒有返回輸出,那麼Korn shell的缺失。 (至少在您的環境路徑中找不到)您可以從KornShell站點獲取它或通過軟件包管理器系統安裝它。

爲了替換所有shell腳本解釋器行(* .SH),你可以運行這樣的事情:

sed -i "s/^#\!.*$/#\!\/bin\/ksh/" *.sh 

-i選項是在地方編輯文件。 (警告:首先不用-i測試此命令,以避免文件修改。)

帶引號的參數是匹配所有以「#!」開頭的行的模式。並用「#!/ bin/ksh」替換它們。 (請注意,某些特殊字符在之前需要使用「\」進行轉義。)如果它不完全是您正在尋找的替換品,您可能需要自定義此參數。

+0

不知何故,我收到一個錯誤:非法變量名稱。但是,這個作品: 'sed -i's /^#\!.*$/#!\ bin \/ksh /'* .sh' – danger89 2017-02-16 18:04:08

0

在我的機器上只有這個工程 sed -i "s/^#\!.*/#\!\/usr\/bin\/perl/" *.sh Everyother引發一個錯誤。