有人可以告诉我如何在我的机器上找到KornShell(ksh)的路径名,然后更改当前目录中显示ksh的不同路径名的所有shell脚本(.sh)中的解释器行吗? / p>
答案 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
这将匹配sh
或bash
并保留之后出现的任何空格(和参数)。它仅作用于第一行,因此它不会触及文件中稍后可能出现的类似行。
替换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
每个人都会抛出错误。