[РЕШЕНО] bash: как создать симлинк на файл, путь к которому получается из потока вывода другой программы?
Захотелось написать скрипт, который при вызове создаёт в /var/www/localhost/htdocs/music симолическую ссылку на файл с песней, которая проигрывается в данный момент.
По идее это выглядеть должно приблизительно так:
ln -s `dcop amarok player path` /var/www/localhost/music/nowplaying.mp3
Но такая конструкция не работает, потому что а) в пути к файлу всегда есть пробелы б) в пути к файлу могут быть одинарные/двойный кавычки, скобки, да и вообще любые символы.
Да и вообще непонятно, можно ли создать симолическую ссылку не на файл напрямую, а на path, который выводит в консоль какая-нибудь программа (в данном случае dcop).
Уже битый час бьюсь над этим, казалось бы, простым моментом - но ничего не получается.
Нужно это для того, чтобы быстро поделитсья с людьми в чате локальной сети ссылкой на прослушиваемое в данный момент.
Кто-нибудь может поспособствовать?
P.S.
Вот пример:
$ cd /var/www/localhost/htdocs/music $ /usr/kde/3.5/bin/dcop amarok player path /home/Музыка/Eyes of Eden/2007 - Faith/04. Pictures.mp3 #следующая строчка успешно создаёт симлинк file.mp3 на нужный мне файл $ ln -s /home/Музыка/Eyes\ of\ Eden/2007\ -\ Faith/04.\ Pictures.mp3 file.mp3 #а вот то, как хочу это реализовать я, ничего не даёт: $ ln -s `/usr/kde/3.5/bin/dcop amarok player path` ln: указанная цель `file.mp3' не является каталогом #Хорошо, вижу разницу - dcop выдал путь, в котором есть пробелы, а симлинк удачно создался на файл, где пробелы были предварены обратным слешем. Ладно, делаю так: $ /usr/kde/3.5/bin/dcop amarok player path | sed s/\ /\\\\\ /g /home/Музыка/Eyes\ of\ Eden/2007\ -\ Faith/04.\ Pictures.mp3 #отлично, вроде то что надо. Но почему тогда: $ ln -s `/usr/kde/3.5/bin/dcop amarok player path | sed s/\ /\\\\\ /g` file.mp3 ln: указанная цель `file.mp3' не является каталогом
- Для комментирования войдите или зарегистрируйтесь
Ну, для начала: ln -s "zomg
Ну, для начала:
ln -s "zomg zomg" "rofl rofl"
должо прокатыватьНе прокатывает
Тем более что эти "zomg zomg" и "rofl rofl" совсем не в тему.
Нужно чтобы работало ln -s результат_выполнения_скрипта_генерирующего_путь_к_файлу путь_к_создаваемой_ссылке
Но не работает, спотыкаясь о пробелы и другие спецсимволы.
А если попробовать так:ln
А если попробовать так:
P.S. a_v, по-моему, именно это и хотел предложить.
Я ♥ Gentoo & Funtoo
...
F1="$(dcop amarok player path)"
F2="/path/`basename "${F1}"`"
ln -s "${F1}" "${F2}" # Кавычки обязательны
Спасибо, заработало
Lupo Alberto, inspirra, оба ваши варианта работают.
a_v, извиняюсь за некоторую резкость, меня просто немного достало это жонглирование кавычками.