Новичку. Про последовательность команд.

Изображение пользователя Toper_Harley.
Опубликовано:
Раздел:

Хочу написать простейший сценарий shell. Надо проконсультироваться. Вобщем необходимо, чтобы выполнялись две команды, причем вторая только после полного выполнения первой. Это декод видео в два прохода.
Т.е. в консоли я ввожу последовательно (перейдя до этого в нужную дирку):
# mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
затем
# mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

Вот и все. Просто неохота ждать, чтобы ввести вторую самостоят-но. Лучше чайку попить. Потом сам уже поэкспериментирую с [ ].
Таким образом был бы признателен за полное содержимое сего сценария. И уж совсем признателен за сопутствующие комменты (кроме уровня моего интеллекта)) о нем сам догадываюсь).


Et non intremuit medulla mea -
И да не устрашился мой разум...
Изображение пользователя Cherepulya.

Re: Новичку. Про последовательность команд. #1

создаете файл (скрипт) с таким содержимым:

#!/bin/bash
cd /dir/bla-bla
echo "decoding first file"
# mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
echo "decoding second file"
# mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

делаете ваш файл исполняемым chmod 777 file

запускаете его

Для изучения bash советую ABS - Advanced Bash Skripting guide

Изображение пользователя sergeil.

Re: Новичку. Про последовательность команд. #2

Цитата:
Toper_Harley пишет: Хочу написать простейший сценарий shell. Надо проконсультироваться. Вобщем необходимо, чтобы выполнялись две команды, причем вторая только после полного выполнения первой.

Две строки в SHELL скрипте
>CUT HERE<
#! /bin/bash
# Выполняем одно
mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi

# Потом выполняем второе(после выполнения первого).
mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi
>CUT HERE<

Хотя можно обойтись и без скрипта. Достигается использованием специального символа разделителя (;) которые интерпретируется BASH как

Внимание, перенос на следующую строку воспринимать как проблему форматирования... Все должно быть в одной строке...
mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi ; mencoder vts_01_1.vob -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi


Админ админу - друг, товарищ и ман...
(c) Almaty

Изображение пользователя woodoo.

Re: Новичку. Про последовательность команд. #3

Конструкция с `;' приведет к безусловному выполнению второго операнда.
Возможно, имеет смысл (оптимальнее в данном случае) использовать `&&'.


Long Live!

Изображение пользователя sergeil.

Re: Новичку. Про последовательность команд. #5

Цитата:
woodoo пишет: Конструкция с `;' приведет к безусловному выполнению второго операнда. Возможно, имеет смысл (оптимальнее в данном случае) использовать `&&'.
Совершенно правильно... В данном случае конструкция с '&&' идеологически более правильная, поскольку более полно соответствует поставленной задаче. Но вопрос был поставлен по другому
Цитата:
... необходимо, чтобы выполнялись две команды, причем вторая только после полного выполнения первой.
То есть, условие успешности выполнения первой строки не оговаривалось. А раз так, то мой ответ наиболее точно соответствует поставленному вопросу... Улыбка


Админ админу - друг, товарищ и ман...
(c) Almaty

Изображение пользователя woodoo.

Re: Новичку. Про последовательность команд. #6

Цитата:
sergeil пишет: То есть, условие успешности выполнения первой строки не оговаривалось. А раз так, то мой ответ наиболее точно соответствует поставленному вопросу... Улыбка

Бесспорно, как и совет "abs - must have". :good:


Long Live!