2010-11-17 68 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引发一个错误。