pcmanfm争论;庆典

时间:2009-01-31 16:36:07

标签: bash pcmanfm

我使用ubuntu,fluxbox,pcmanfm作为filemanager,xmms2作为音乐播放器。
我的目标:使用pcmanfm轻松地将歌曲添加到xmms2播放列表。

我有这个适用于单个文件的脚本:

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

我还希望能够添加一组文件
我的意思是选择所有这些然后 rigth-click - >打开 - > 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

但它不起作用。
(我知道运行 for 循环通过带有空格的文件名有问题,所以只尝试非空白文件。)

我尝试记录输出添加此

echo date >> /home/me/output.txt
echo xmms2 radd "$path" >> /home/me/output.txt
if 语句中的

。 当我尝试添加文件组时,似乎只调用了一次程序。


也许有人知道pcmanfm如何用一些程序打开多个文件?
(我想其他程序也是这样)
或者也许有人只知道如何用bash脚本实现我的目标?

以防万一:将项目添加到xmms2播放列表"xmms2 radd directory_name""xmms2 add file_name"
我对bash只有基本的理解,如果答案不适用于expashienced bash程序员,那将会很好:)

1 个答案:

答案 0 :(得分:2)

将for循环更改为:

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

for循环遍历其参数,你的args变量是一个数组,但bash只在你执行$ args时看到第一个元素。

Greg's Bash FAQ/Wiki: How can I use array variables?

这实际上是我如何写它以使其更具可读性:

for x in "$@"; do
    [[ -d $x ]] && xmms2 radd "$x"
    [[ -f $x ]] && xmms2 add  "$x"
done