1

私はファイルマネージャーとしてubuntu、fluxbox、pcmanfm、音楽プレーヤーとしてxmms2を使用しています。
私の目標は、pcmanfmを使用してxmms2プレイリストに曲を簡単に追加することです。

私は単一のファイルに対して機能するこのスクリプトを持っています:

パス=$1
if [-d "$ path"]; 次に#ifディレクトリ
    xmms2 radd "$ path"
そうしないと
    if [-e "$ path"]; 次に、#ディレクトリではなくファイル
        xmms2は「$path」を追加します
    fi
fi

また、ファイルのグループを追加する機能も必要です 。つまり
、すべてのファイルを選択してから、右クリック->開く-> xmms2_add_script

ループ内の同じコードが機能するはずだと思います(pcmanfmが1つ以上の引数を渡す場合):

args =( "$ @")
$argsのパスの場合; 行う
    if [-d "$ path"]; それから
        xmms2 radd "$ path"
    そうしないと
        if [-e "$ path"]; それから
            xmms2は「$path」を追加します
        fi
    fi
終わり

しかし、それは機能しません。 (空白を含むファイル名のfor
ループの実行に問題があることはわかっているので、空白以外のファイルのみを試してみました。)

これを追加して出力をログに記録してみました

エコー日付>>/home/me/output.txt
echo xmms2 radd "$ path" >> /home/me/output.txt

ifステートメントで。ファイルのグループを追加しようとすると、プログラムが1回だけ呼び出されるようです。


たぶん誰かがpcmanfmがいくつかのプログラムで複数のファイルを開く方法を知っていますか?
(他のプログラムも同じように動作すると思います)
または、bashスクリプトを使用して目標を達成する方法を誰かが知っているかもしれません。

念のため:xmms2プレイリストにアイテムを追加する"xmms2 radd directory_name""xmms2 add file_name"
、bashの基本的な理解しか持っていないので、経験豊富なbashプログラマーが答えを出せない場合は便利です:)

4

1 に答える 1

2

for ループを次のように変更します。

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

for ループはその引数をループし、args 変数は配列ですが、$args を実行すると bash は最初の要素しか認識しません。

Greg の Bash FAQ/Wiki: 配列変数を使用するにはどうすればよいですか?

これは実際に、より読みやすくするために私がそれを書く方法です:

for x in "$@"; do
    [[ -d $x ]] && xmms2 radd "$x"
    [[ -f $x ]] && xmms2 add  "$x"
done
于 2009-01-31T16:54:08.147 に答える