Portál AbcLinuxu, 6. května 2025 20:16
CMD_EVAL="$APPLICATION_MKVINFO $ACTUAL_PROCESSED_DIRECTORY/$SOURCE_FILE | grep -B4 'Track type: video' | grep 'Track number' | awk '{print \$5}'" logCommand $CMD_EVAL VIDEO_TRACK_NUMBER=$(eval $CMD_EVAL)Do proměnné
VIDEO_TRACK_NUMBER
by se mělo uložit číslo ID video stopy, ale něuloží.
Zápis pomocí evalu používám hlavně kvůli skládání příkazu - pokud má MKV např. více audio stop, generuje se příkaz dynamicky.
Děkuji za nápady if [ "$debug" ]; then echo "prikaz --parameter --parameter..." fi prikaz --parameter --parameter...
#!/bin/bash -x
, dostanu sice verbose mode, ale pro bash, který mne moc nezajímá. Vidím toto: hurvajs@htpc ~ $ ~/bin/mkvmerger.sh --verbose + VERSION=0.1-alpha1 ++ basename /home/hurvajs/bin/mkvmerger.sh + SCRIPT_NAME=mkvmerger.sh + PREFIX_VERBOSE_MESSAGE='---> ' + PREFIX_MESSAGE=' ' + PREFIX_COMMAND_VERBOSE_MESSAGE='---> CMD - ' + LOCK_FILE=mkvmerger.sh.lock + SCRIPT_CONFIGURATION_FILE=mkvmerger.conf + DATE_FORMAT='%Y/%m/%d %H:%M:%S' + SEPARATOR_PROCESSED_FOLDER='\n----------------------------------------------------------------------------------' ++ which mkvinfo + APPLICATION_MKVINFO=/usr/bin/mkvinfo ++ which mkvextract + APPLICATION_MKVEXTRACT=/usr/bin/mkvextract ++ which mkvmerge + APPLICATION_MKVMERGE=/usr/bin/mkvmerge ++ which iconv + APPLICATION_ICONV=/usr/bin/iconv ++ which enca + APPLICATION_ENCA=/usr/bin/enca + AUDIO_POSSIBLE_LANGUAGE=('eng' 'cze') + AUDIO_PREFERRED=eng + SUBTITLE_POSSIBLE_LANGUAGE=('cze' 'eng') + SUBTITLE_PREFERRED=cze + SUBTITLE_ENCODING=utf-8 + FLAG_VERBOSE_MODE=0 + FLAG_NO_NEW_LINE=0 + DEBUG_MESSAGE_VIDEO= + DEBUG_MESSAGE_AUDIO= + DEBUG_MESSAGE_SUBTITLE= + DIRECTORY_INPUT=/home/hurvajs/Source/new_processed_movies/uncorrected + DIRECTORY_OUTPUT=/home/hurvajs/Source/new_processed_movies/corrected + TRACKS_TO_EXTRACT_LIST= + TRACKS_TO_EXTRACT_COUNT=0 + IFS=' ' + COLOR_ESCAPE_SEQUENCE='\033[' + COLOR_OFF='\033[0m' + COLOR_MOVIE_TITLE='\033[4;1;34m' + COLOR_COMMAND='\033[44m' + COLOR_ERROR='\033[1;31m' + COLOR_WARNING='\033[1;33m' + COLOR_SUCCESS='\033[1;32m' ++ date '+%Y/%m/%d %H:%M:%S' + EVENT_DATE='2015/03/06 13:01:36' + trap '{ rm -rf /home/hurvajs/Source/new_processed_movies/uncorrected/mkvmerger.sh.lock; exit 255; }' EXIT + ARGUMENTS_SHORT=vhcdV + ARGUMENTS_LONG=version,help,help-configuration,debug,verbose ++ getopt -o vhcdV:: --long version,help,help-configuration,debug,verbose:: -n mkvmerger.sh -- --verbose ... ...což je brutálně ukecaný a zbytečný... Zkusím to popsat, když pustím můj skript s
--verbose
zapne se ukecaný režim, kde bych rád vypisoval i příkazy, které pouštím ve skriptu, tj. mkvinfo, enca, iconv atd. které mi vytáhnou informace ze zpracovávaného MKV kontejneru, tak abych mohl kontejner extrahovat a pak složit dle svých požadavků (ENG audio, ENG + CZE titulky, pojmenování kontejneru atd).
Aktuálně mi dělá problém toto (a na to jsem se i ptal):# internal video tracks CMD_EVAL="$APPLICATION_MKVINFO $ACTUAL_PROCESSED_DIRECTORY/$SOURCE_FILE | grep -B4 'Track type: video' | grep 'Track number' | awk '{print $5}'" # tady se zobrazí příkaz logCommand $CMD_EVAL # tady by se měl pustit a do proměnné VIDEO_TRACK_NUMBER naplnit ID audio stopy VIDEO_TRACK_NUMBER=$(eval "$CMD_EVAL")Problém je u toho awk. Abych docílil toho, že se mi zobrazí správně, musím escapovat $5, tj. \$5. Což je pak zase špatně pro vlastní eval.
set -x
") a vypínat ("set +x
").
mediainfo --Output='Video;%ID%' file.mkv(ak súbor obsahuje viac video stôp, bude potrebné upraviť tú šablónu pre parameter Output)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.