Intereting Posts
RandR не распознает монитор Два «аудиокодека» имеют 100% -ное использование мощности в PowerTOP – что это значит? Использование Ubuntu Server в качестве DHCP и DNS-сервера для пересылки URL-адресов на IP-адреса Восстановить Linux Mint (Cinnamon) после удаления некоторых файлов Как узнать общий размер файлов определенного типа на моем жестком диске? Кэшированная память, но используется swap Ошибка (qt5_add_resources) при сборке kaffeine в debian jessie операция оболочки внутри makefile При добавлении содержимого в начале файла происходит обновление всех блоков данных? Как защитить / защитить журналы журналов log_input / log_output «sudo»? Опустить расширение с помощью find? Почему для перезагрузки и отключения питания требуются привилегии root? Как сохранить статус последнего выхода после теста команда терминала | grep IP Как обрабатывать управление несколькими машинами-точками

Передача путей и имен файлов в программу из сценария bash

Я использую утилиту под названием mp3wrap, которая объединяет несколько mp3-файлов в один. Скажем, у меня есть каталог «альбом 1», содержащий три файла «track 1.mp3», «track 2.mp3» и «track 3.mp3». Я буду запускать следующее:

mp3wrap album\ 1.mp3 album\ 1/*.mp3 

который объединит все три трека в каталоге «альбом 1» (второй аргумент) в новый файл «album 1.mp3» (первый аргумент).

У меня есть множество каталогов, таких как «альбом 2», «альбом 3» и т. Д., И я хотел бы написать сценарий для автоматизации процесса. Я попробовал это:

 for i in album* do mp3wrap $i.mp3 $i/*.mp3 done 

но я получаю ошибку

 1.mp3: No such file or directory 

Кажется, мой скрипт расширяет $ i до «album 1.mp3», который передается как два отдельных аргумента. После некоторых поисков и чтения я закончил с этим:

 for i in album* do mp3wrap "${i}.mp3" "${i}/*.mp3" done 

Теперь я не получаю сообщение об ошибке, вместо этого я получаю страницу «использование» из программы mp3wrap. Настолько ясно, что он не принимает аргументы так же, как когда я запускаю команду из командной строки, и я не знаю, как проверить, как выглядит фактическая строка командной строки при выполнении сценария bash.

Что я делаю не так? Любая помощь ценится!

Вы близко к нему. Вот правильный код:

 for i in album* do mp3wrap "${i}.mp3" "${i}"/*.mp3 done 

Переменные и аргументы должны всегда всегда цитироваться, чтобы избежать первой проблемы. Наоборот, символы глобуса оболочки, такие как * и ? не должны, иначе они теряют свое особое значение.