2

有没有办法从 shell 脚本中只执行指定数量的行?我会尝试用 head 复制它们并将它们放在单独的 .sh 上,但我想知道是否有捷径......

4

4 回答 4

2

重新组织 shell 脚本并创建函数。

说真的,将每一行代码放入一个函数中。

然后(以 ksh 为例),使用 "." 获取脚本。进入交互式外壳。

您现在可以按名称运行任何函数,并且只会运行该函数中的代码。

下面的简单示例说明了这一点。您可以通过两种方式使用它: 1) 链接脚本,以便您可以通过其中一个函数的名称来调用它。2) 获取脚本(使用. script.sh),然后您可以在其他地方重用这些函数。

function one {
     print one
}

function two {
     print two
}

(
    progname=${0##*/}
    case $progname in
    (one|two)
         $progname $@
    esac

)
于 2013-07-06T07:10:49.967 回答
1

例如,编写您自己的脚本 /tmp/headexecute

#!/bin/ksh
trap 'rm -f /tmp/somefile' 0
head -n $2 $1 > /tmp/somefile
chmod 755 /tmp/somefile
/tmp/somefile

使用文件名和要执行的行数调用它

/tmp/headexecute /tmp/originalscript 10

于 2013-07-06T07:05:57.640 回答
0

大多数贝壳没有这样的设施。你将不得不以艰难的方式做到这一点。

于 2013-07-06T07:03:07.540 回答
0

这可能对您有用(GNU sed):

sed -n '1{h;d};H;2{x;s/.*/&/ep;q}' script

这将执行 a 的前两行script

于 2013-07-06T18:54:58.457 回答