2013-07-06 6 views
2

Есть ли способ выполнить только определенное количество строк из сценария оболочки? Я попробую скопировать их с головой и поставить их на отдельный .sh, но мне интересно, есть ли ярлык ...Выполнять n строк сценария оболочки

+0

Почему вы спрашиваете? Не можете ли вы просто использовать 'bash -vx', чтобы понять, что делает скрипт? –

+0

У меня есть 20-строчный скрипт, и иногда я хочу выполнить только первые 2 строки, а иногда и все. – paranoidhominid

+0

Затем создайте другой скрипт только с двумя строками. –

ответ

2

Реорганизовать сценарий оболочки и создать функции.

Серьезно, поместите каждую строку кода в функцию.

Затем (используя ksh в качестве примера), отправьте сценарий с помощью «.». в интерактивную оболочку.

Теперь вы можете запускать любую из функций по имени, и будет работать только код внутри этой функции.

Этот тривиальный пример иллюстрирует это. Вы можете использовать это двумя способами: 1) Свяжите сценарий, чтобы вы могли назвать его по имени одной из функций. 2) Исходный сценарий (с . script.sh), и вы можете повторно использовать функции в другом месте.

function one { 
    print one 
} 

function two { 
    print two 
} 

(
    progname=${0##*/} 
    case $progname in 
    (one|two) 
     $progname [email protected] 
    esac 

) 
+0

Я принял этот стиль для любого скрипта длиной более 10-12 строк, и это упростило проверку кода и повторное использование частей скриптов. –

0

Большинство снарядов не имеют такого объекта. Вам придется сделать это с трудом.

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

0

Это может работать для вас (GNU СЭД):

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

Это выполняет две первые строки в script.

Смежные вопросы