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

Аватар пользователя 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

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

Аватар пользователя Cherepulya

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

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

#!/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: Новичку. Про последовательность команд.

Цитата:
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

Аватар пользователя woodoo

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

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

Аватар пользователя sergeil

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

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

Совершенно правильно... В данном случае конструкция с '&&' идеологически более правильная, поскольку более полно соответствует поставленной задаче. Но вопрос был поставлен по другому

Цитата:
... необходимо, чтобы выполнялись две команды, причем вторая только после полного выполнения первой.

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

Аватар пользователя woodoo

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

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

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

RSS-материал