LINUX.ORG.RU

Shell Script как передать путь с пробелами?


0

1

Столкнулся с проблемой, не могу передать программе путь к файлу, в котором содержаться пробелы и другие символы, которые обычно экранируются слэшем.
Например скрипт:

NEWDIR="Test Dir"
mkdir "${NEWDIR}"
cd "${NEWDIR}"
pwd
Тут всё отлично, создаётся каталог с пробелом, и выполняется переход в него.
А теперь другой пример, который не работает, есть файлы допустим «my music.flac» и «my music.cue»
Мне нужно передать их скрипту и обработать несколькими программами, пишу примитивный скрипт, который покажет что я ему передал, и попытается передать это первой программе для обработки:
echo "${1} - ${2}"
shntool split -f "${1}" -o "${2}"
Выполняю:
«$ test.sh ./my\ music.cue ./my\ music.flac»
Получаю:
./my music.cue - ./my music.flac
shntool [split]: error: invalid file format: [./my]
В итоге, программа получает только «my» до пробела..
Гуглил кучу манов по bash-у.. ничего путного не нашёл.

форма :

~$ ./bla-bla-bla
призвана запустить файл bla-bla-bla как исполняемый . Если вы хотите просто передать этот файл как параметр к скрипту или программе "./" не нужно . Т.е. в данном случае должно быть как-то так :
~$ test.sh my\ music.cue my\ music.flac
или так :
~$ test.sh 'my music.cue' 'my music.flac'

Gramozeka ★★
()

Ты напутал. После -o указывается ФОРМАТ получаемого файла. Вот так всё работает:

#!/bin/sh
shnsplit -f "$1" "$2" -o flac
Psych218 ★★★★★
()
Ответ на: комментарий от Psych218

Ну или, если хочешь формат тоже указывать, то

#!/bin/sh
shnsplit -f "$1" "$2" -o $3

Запускать как:

./test.sh my\ music.cue my\ music.flac flac

или например

"./test.sh «my music.cue» «my music.ape» wav

Дальше сам разберёшься, думаю.

Psych218 ★★★★★
()
Ответ на: комментарий от Gramozeka

Gramozeka> форма :

~$ ./bla-bla-bla

призвана запустить файл bla-bla-bla как исполняемый .

Чушь собачья. Эта форма --- относительный путь к файлу.

sdio ★★★★★
()
Ответ на: комментарий от sdio

> Эта форма --- относительный путь к файлу.

ну да , а если этот файл передаётся как параметр эта форма не нужна , максимум можно указать абсолютный путь , а вот "./файл-как-параметр" это и есть чушь собачья ..

Gramozeka ★★
()
Ответ на: комментарий от Gramozeka

Ты дурачок? Нужна или не нужна это третий вопрос. Главное — это абсолютно легитимная форма записи пути к файлу.

sdio ★★★★★
()
Ответ на: комментарий от sdio

Просто началась неделя знатоков на лоре. Следующий коммент будет из серии «проще на сях накатать»

zolden ★★★★★
()
Ответ на: комментарий от Psych218

Psych218
Нет, я не напутал, я просто использовал shntool вместо shnsplit, там ключи ненмого по другому устанавливаются..
На удивление с shnsplit всё работает, видать действительно ошибка в shntool ..

EuPhobos
() автор топика

Всем спасибо, сделал скрипт который и хотел.

#!/bin/bash
#echo "cue flac output [image]"

#Конвертить cp1251 -> utf8
CONVERT=true

PWD=`pwd`
CUE="${PWD}/${1}"
FLAC="${PWD}/${2}"
OUTPUT="${PWD}/${3}"
PICTURE="${PWD}/${4}"

if [ -z "${3}" ]; then
        echo "error"
else
        if [ $CONVERT == "true" ]; then
                iconv -fcp1251 -tutf8 "${CUE}" > /tmp/utf8.cue
                CUE="/tmp/utf8.cue"
        fi
        cd "${OUTPUT}"
        shnsplit -t %n_%t -f "${CUE}" -o flac "${FLAC}"

        if [ -n "${4}" ]; then
                metaflac --import-picture-from "${PICTURE}" ./*.flac
        fi

        cuetag "${CUE}" ./*.flac

        if [ $CONVERT == "true" ]; then
                rm /tmp/utf8.cue
        fi

        cd "${PWD}"

fi
После исполнения комманды:
./flac_split.sh 04\ Вавилон\ \(сингл\)\ \(2004\)/Кипелов\ -\ Вавилон.cue 04\ Вавилон\ \(сингл\)\ \(2004\)/Кипелов\ -\ Вавилон.flac test 04\ Вавилон\ \(сингл\)\ \(2004\)/Обложка\ альбома.JPG
- Отработал как надо, разбил песни, вставил тэги и картинки. Ошибка была явно в программе shntool, а я убил не один час на обходные пути, путём подставления слэшей через sed =)) Эхх..

EuPhobos
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.