аргументы pcmanfm; удар - PullRequest
       14

аргументы pcmanfm; удар

1 голос
/ 31 января 2009

Я использую ubuntu, fluxbox, pcmanfm в качестве файлового менеджера, xmms2 в качестве музыкального проигрывателя.
Моя цель: легко добавлять песни в плейлист xmms2 с помощью pcmanfm.

У меня есть этот скрипт, который работает для отдельных файлов:

path= $1
if [ -d "$path" ]; then #if directory
    xmms2 radd "$path"
else
    if [ -e "$path" ]; then #if not directory, but file
        xmms2 add  "$path"
    fi
fi

Я также хочу иметь возможность добавлять группу файлов
Я имею в виду, выделите их все, а затем щелчок правой кнопкой мыши -> открыть с помощью -> xmms2_add_script

Я думаю, что тот же код в цикле должен работать (если pcmanfm передает только более одного аргумента):

args=("$@") 
for path in $args; do
    if [ -d "$path" ]; then
        xmms2 radd "$path"
    else
        if [ -e "$path" ]; then
            xmms2 add  "$path"
        fi
    fi
done

но это не работает.
(Я знаю, что есть проблема с запуском для цикла по именам файлов с пробелами, поэтому пробовал только файлы без пробелов.)

Я попытался зарегистрировать вывод, добавив

echo date >> /home/me/output.txt
echo xmms2 radd "$path" >> /home/me/output.txt

в , если заявления. Кажется, что программа вызывается только один раз, когда я пытаюсь добавить группу файлов.


Может кто знает, как pcmanfm открывает несколько файлов какой-то программой?
(я полагаю, другие программы делают то же самое)
А может, кто-то просто знает, как мне достичь своей цели с помощью bash-скрипта?

На всякий случай: добавить элемент в список воспроизведения xmms2 "xmms2 radd directory_name" или "xmms2 add file_name"
У меня есть только базовое понимание bash, поэтому было бы неплохо, если бы ответы не были для опытных программистов bash:)

1 Ответ

2 голосов
/ 31 января 2009

Измените цикл for на это:

for path in "${args[@]}"; do

Цикл for проходит по своим аргументам, ваша переменная args является массивом, но bash видит первый элемент, только когда вы делаете $ args.

Greg's Bash FAQ / Wiki: Как я могу использовать переменные массива?

На самом деле я бы написал так, чтобы было удобнее читать:

for x in "$@"; do
    [[ -d $x ]] && xmms2 radd "$x"
    [[ -f $x ]] && xmms2 add  "$x"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...