私がやりたいことは、ファイルリストを引数として使用してスクリプトを実行することです。私のスクリプトでは、このファイルでxtermとmplayerを起動したいと思います。
色々試してみました。私は次のようにスクリプトを呼び出します。
myscript.sh *
これファイル名は次のとおりです。
"aaa AAA"
"bbb BBB"
"ccc DDD"
(つまり、スペースを含むファイル名)mplayerを使用して再生できるサウンド、音楽、またはビデオ。
これが私が試したことです。
次のコマンドをすべて作成してください。私のスクリプトの中に!
私は試した:
次のような働く。ファイルが印刷されます。
ls -l $@
次のような働く。ファイルが印刷されます。
IFS='\n' ls -l $*
次のような働く。ファイルが印刷されます。奇妙なことは、
IFS='\n'
ここでは必要ではないということです。なぜ?xterm -e 'ls -l $*; read'
これ確かにファイルが見つかりました。
FILES=$@ ls -l $FILES
これ確かにファイルが見つかりました。ここで、すべてのファイル名は 1 つの長いファイル名として扱われます。 (???)
IFS='\n' FILES=$@ ls -l $FILES
これ確かにファイルが見つかりました。
export FILES=$@ ls -l $FILES
しかし、次の働く。ファイルが印刷されます。
IFS='\n' export FILES=$@ ls -l $FILES
今mplayerを試してみてください。
これ働く。
IFS='\n' export FILES=$@ mplayer $FILES
これ確かに働くところで、なぜ2回が
ls -l
効果があるのでしょうか?ここで、mplayerはmplayer
引数なしで開始したかのようにヘルプ印刷を終了します。xterm -e 'mplayer $*; read'
これ確かに働くファイル名にスペースが含まれているすべてのファイルは失敗します。
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
モードを理解していますか?