UNIX,更改所有shell脚本中的解释器行

时间:2010-11-17 14:49:40

标签: linux shell unix scripting ksh

有人可以告诉我如何在我的机器上找到KornShell(ksh)的路径名,然后更改当前目录中显示ksh的不同路径名的所有shell脚本(.sh)中的解释器行吗? / p>

5 个答案:

答案 0 :(得分:7)

这将为您提供Korn shell的路径:

which ksh

这将取代所有shell脚本中的shebang:

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

答案 1 :(得分:3)

将它放在每个文件的第一行(shebang行):

#!/usr/bin/env ksh

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

答案 2 :(得分:3)

找出ksh居住的地方:

whence -a ksh

要更改当前目录中的所有shell脚本以使用ksh:

sed -i '1{/^#!\/[^ ]*\/\(ba\|\)sh\( *\)/s||#!/bin/ksh\2|}' *.sh

这将匹配shbash并保留之后出现的任何空格(和参数)。它仅作用于第一行,因此它不会触及文件中稍后可能出现的类似行。

替换ksh可执行文件的实际位置或使用/usr/bin/env ksh

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

答案 3 :(得分:0)

此命令将在UNIX环境中找到korn shell可执行文件:

which ksh

如果没有返回输出,则缺少korn shell。 (至少在您的环境路径中找不到。)您可以从KornShell站点获取它,或通过您的软件包管理器系统安装它。

为了替换所有shell脚本(* .sh)中的解释器行,你可以运行这样的东西:

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

-i选项是编辑文件。 (警告:首先不使用-i测试此命令,以避免文件修改。)

引用的参数是匹配以“#!”开头的所有行的模式并用“#!/ bin / ksh”替换它们。 (请注意,某些特殊字符之前需要使用“\”进行转义。)如果它不是您正在寻找的替代品,则可能需要自定义此参数。

答案 4 :(得分:0)

在我的机器上只有这个有效 sed -i "s/^#\!.*/#\!\/usr\/bin\/perl/" *.sh 每个人都会抛出错误。