while цикл работает только один раз?

Я пытаюсь сделать клип из видеофайла, играя его только на определенный интервал.

make_mclip.sh

#!/bin/bash mediafile=$@ mediafile_fullpath=$PWD/./$mediafile tmpedlfile=$(mktemp) mplayer -edlout $tmpedlfile "$mediafile" &> /dev/null cat $tmpedlfile | while read f do startpos=$(echo $f | awk '{print $1}') endpos=$(echo $f | awk '{print $2}') length=$(echo "$endpos-$startpos" | bc) tmpclip=$(mktemp --suffix='.mclip' --tmpdir=$PWD) echo -e "$mediafile_fullpath\t$startpos\t$length" > $tmpclip mplayer_clip.sh "$tmpclip" &>/dev/null echo -n "clip name : " read clipname < /dev/tty mv -nv "$tmpclip" "$clipname.mclip" done echo doing rm "$tmpedlfile" 

mplayer_mclip.sh

 #!/bin/bash mediafile=$(cat "$@" | awk -F'\t' '{print $1}') startpos=$(cat "$@" | awk -F'\t' '{print $2}') length=$(cat "$@" | awk -F'\t' '{print $3}') mplayer -ss $startpos -endpos $length "$mediafile" &> /dev/null 

Но по какой-то причине цикл while в make_mclip.sh запускается только один раз, даже если $ tempedlfile содержит более одной строки; единственное исключение – если строка

  mplayer_clip.sh "$tmpclip" &>/dev/null 

удален.

Что не так ?

пс. Я также хотел бы знать, есть ли для этого программа.

One Solution collect form web for “while цикл работает только один раз?”

mplayer «потребляет» оставшееся содержимое tmpedlfile. Вам нужно добавить параметр, чтобы он не игнорировал его stdin:

 mplayer -noconsolecontrols -ss $startpos -endpos $length "$mediafile" &> /dev/null 
  • vimdiff для сравнения вывода вместо файлов
  • Перенаправление stdin с stdout в файл
  • Сделать программу сначала прочитанной из трубы, затем с клавиатуры
  • Где фактически передаются аргументы командной строки (например, «some.text»)?
  • Как передать пароль в командную строку mysql
  • Будет ли вывод вывода вывода фонового процесса в качестве входного сигнала stdin переднего плана?
  • Отправка двоичных данных в get ()
  • Как передавать данные из одной команды в другую команду, которая разрешает только файл в качестве аргумента?
  • Использование ввода файла как stdin для сценария оболочки не работает
  • Вопрос об интерактивном обнаружении в bash
  • Элементы управления TTY, отправленные в stdin sh, не работают
  • Linux и Unix - лучшая ОС в мире.