mplayerを起動し、スクリプトに引数として提供されたファイルを再生するシェルスクリプトxtermでどのように起動できますか?

mplayerを起動し、スクリプトに引数として提供されたファイルを再生するシェルスクリプトxtermでどのように起動できますか?

私がやりたいことは、ファイルリストを引数として使用してスクリプトを実行することです。私のスクリプトでは、このファイルでxtermとmplayerを起動したいと思います。

色々試してみました。私は次のようにスクリプトを呼び出します。

myscript.sh *

これファイル名は次のとおりです。

"aaa AAA"
"bbb BBB"
"ccc DDD"

(つまり、スペースを含むファイル名)mplayerを使用して再生できるサウンド、音楽、またはビデオ。

これが私が試したことです。

次のコマンドをすべて作成してください。私のスクリプトの中に!

私は試した:

  1. 次のような働く。ファイルが印刷されます。

    ls -l $@
    
  2. 次のような働く。ファイルが印刷されます。

    IFS='\n'
    ls -l $*
    
  3. 次のような働く。ファイルが印刷されます。奇妙なことは、IFS='\n'ここでは必要ではないということです。なぜ?

    xterm -e 'ls -l $*; read'
    
  4. これ確かにファイルが見つかりました。

    FILES=$@
    ls -l $FILES
    
  5. これ確かにファイルが見つかりました。ここで、すべてのファイル名は 1 つの長いファイル名として扱われます。 (???)

    IFS='\n'
    FILES=$@
    ls -l $FILES
    
  6. これ確かにファイルが見つかりました。

    export FILES=$@
    ls -l $FILES
    
  7. しかし、次の働く。ファイルが印刷されます。

    IFS='\n'
    export FILES=$@
    ls -l $FILES
    

今mplayerを試してみてください。

  1. これ働く

    IFS='\n'
    export FILES=$@
    mplayer $FILES
    
  2. これ確かに働くところで、なぜ2回がls -l効果があるのでしょうか?ここで、mplayerはmplayer引数なしで開始したかのようにヘルプ印刷を終了します。

    xterm -e 'mplayer $*; read'
    
  3. これ確かに働くファイル名にスペースが含まれているすべてのファイルは失敗します。

    IFS='\n'
    FILES=$@
    xterm -e 'mplayer $FILES; read'
    

質問:変数に保存されたファイルを使用して$FILES独自のxtermでmplayerを起動するには?

ベストアンサー1

スクリプトの引数をmplayerに渡すには、xtermで次のことが機能する必要があります。

#!/bin/sh
xterm -e mplayer "$@"

"$@"これは、サイズ変更がどのように機能するか(項目ごとに1つのパラメータ)によって機能します。xtermするいいえコマンドの引数を何らかの方法で解釈してください。

実際にファイルのリストを変数に入れる必要がある場合は、最良の方法は配列変数を使用することです。たとえば、

#!/bin/bash
declare -a FILES
for f; do
    if [ -r "$f" ]; then
        FILES+=("$f")
    fi
done

xterm -e mplayer "${FILES[@]}"

上記のコードは、ファイルをフィルタリングして読み取り可能なファイルのみを渡します。これは一例に過ぎず、一般にこの種のフィルタリングは行わない。また、エクスポートする予定がない場合は通常、変数名を小文字として使用します。

PS:あなたがやっていることに基づいて、mplayer-slaveモードを理解していますか?

おすすめ記事