например, рассмотрите следующую ситуацию::
Я должен распечатать некоторые числа случайным образом один за другим с временным интервалом 5 секунд между каждым, и я должен завершить терминальный процесс печати чисел, если я встречаюсь с выводом '2'. Действительно ли это возможно.
Я знаю, что мог сделать то же в c, C++, Java, и т.д. и т.д.. Но я хотел бы сделать это с помощью сценария удара.
Примечание:: Если только 'после того, как' я встречаюсь с 'выводом' '2' (или что-либо) затем, процесс должен быть завершен, я подчеркиваю это, потому что 'Я должен завершить терминальный процесс для особого результата'.
оболочка удара знает свой родительский процесс, таким образом, Вы могли сделать:
(( number == 2 )) && kill $PPID
касательно: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables
Можно использовать простое if
оператор, чтобы сделать это:
# your file reading code goes here, make sure $output is set
if [ $output -eq 2 ]; then return; fi
То, что Вы хотите, должно уничтожить оболочку, от которой Вы выполняете сценарий. Это немного хитро, поскольку выполнение сценария породит другую оболочку и тривиальные методы уничтожения, это (kill -9 $
или exit
) будет работать над , метал икру оболочка, не та, вызванная терминалом.
единственный надежный способ, которым я нашел выполнения так, к источник Ваш сценарий вместо того, чтобы выполнить его. Таким образом вместо:
bash script.sh
сделайте:
. script.sh
это заставит материал работать в оболочке вызова, не порожденной.
сам сценарий легок, как замечено в другом ответе:
while true; do sleep 1; number=$RANDOM; echo $number; if [ 2 = 2 ]; then exit; fi; done
На самом деле при выполнении этого как остроты в текущей оболочке это будет закрывать терминал, когда это будет видеть значение 2.
Вы не сказали, куда случайные числа прибудут из; я использовал СЛУЧАЙНЫЙ удар, встроенный который выходные целые числа в диапазоне 0-32767.