Получите каталог верхнего уровня от переменной make-файла

Используйте MPD на своем ноутбуке для потоковой передачи музыки к компьютеру дома.

Я предполагаю, однако, что Вы выполняете MPD на компьютере дома и просто соединяетесь с MPD с Вашим Клиентом от Вашего ноутбука (я предлагаю GMPC).

Это - как я слушаю музыку все время, у меня есть всего один компьютер с музыкой на нем и клиентами на моем ноутбуке и других компьютерах.

MPD может передать музыку потоком через сеть, таким образом, можно подать это к серверу или непосредственно играть его с mplayer.

8
09.11.2011, 16:32
2 ответа

Вы имеете в виду первый компонент каталога? Если так, превратите путь к списку компонентов, затем извлеките первый компонент. Я предполагаю, что Вы используете GNU, делают, и Вы не делаете, что-то безумное как ожидают, что имена файлов с пробелом пройдут невредимый. Не пробуйте это полным путем.

override BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf $(firstword $(subst /, ,$(BUILD_DIR)))

Я делаю BUILD_DIR переопределите то, что пользователь, возможно, передал командную строку, для ухода от кого-то, случайно передача ее и наличие чего-то непреднамеренного удалили.

5
27.01.2020, 20:13
  • 1
    BUILD_DIR как предполагалось, был внутренней переменной, но Вы правы, существует все еще возможность, что кто-то устанавливает ее на что-то опасное. Так принимая этот ответ, с протестом, что решением не должен быть используемый :) –  l0b0 17.02.2012, 10:39
  • 2
    @l0b0, Так как мы принимаем, GNU делает: override BUILD_DIR = … –  Gilles 'SO- stop being evil' 17.02.2012, 10:43

Если Вы положительны, что BUILD_DIR никогда не будет запускаться с '/':

rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )

Иначе Вы, возможно, должны были бы объяснить пути, которые запускаются с '/':

if [[ $BUILD_DIR =~ "^/" ]]; then
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1,2 )
else
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )
fi

echo $rootdir

Или возможно лучше игнорировать любой путь, который запускается с '/'.

0
27.01.2020, 20:13
  • 1
    Это для make-файла, не Bash. Это - тривиальная проблема в Bash, но я интересуюсь простым решением для make-файла. –  l0b0 09.11.2011, 18:14
  • 2
    Одной вещью, которую можно сделать в Make-файле, являются команды выполнения. Таким образом, Вы создаете сценарий оболочки, в Вашем пути, названном корневым каталогом, и в Вашем make-файле, выполняете "комнату-rf $ ($BUILD_DIR корневого каталога)", или что-то как этот. Или необходимо будет сделать что-то, любят, предопределяют корень сборки, так, чтобы Вы могли rm -rf это позже. Я определенно перепроверил бы ответ что rootdir сценарий может пасовать назад, таким образом, Вы не заканчиваете с синтаксической ошибкой, дающей Ваш сценарий rm -rf /. –  Tim Kennedy 09.11.2011, 18:59

Теги

Похожие вопросы