echo "$WINDOW"
— в одну сторону; другим может быть Ctrl-aEnter ;
*
указывает ваше текущее окно и номер, например0
здесь:0*$ bash 2-$ bash
Ссылка:
{}
буквально заменяется именем файла, поэтому поместите его где-нибудь, чтобы он не анализировался специально. Поскольку вы уже используете sh -c
, позиция аргумента кажется идеальной:
find./ -type f -iregex '.*\.flac' -exec sh -c 'ffmtest=$(ffmpeg -v error -i "$1" -f null - 2>&1);if [ -n "$ffmtest" ];then echo -e "$1\n" $ffmtest;fi' -- {} \;
find. -type f -iregex '.*\.flac' -exec sh -c '
for file do
ffmtest=$(ffmpeg -v error -i "$file" -f null - 2>&1)
if [ -n "$ffmtest" ]; then
printf "%s\n" "$file" " $ffmtest"
fi
done' sh {} +
Несколько правил:
{}
— это аргумент кода, передаваемыйsh
(или любому интерпретатору языка ), что может привести к уязвимости, связанной с внедрением кода (, он также не переносим ). В вашем примере все было не так уж и плохо. Но если бы файл назывался, например, $(reboot).flac
, это могло бы иметь более серьезные последствия. Здесь мы передаем{}
(с +
, чтобы как можно больше было передано вsh
)для find
для раскрытия в аргументе встроенного скрипта, а не в коде этого встроенного скрипта. echo
для произвольных данных.