私は遊んでいます。コマンドラインインタフェースのmplayer
。次のようにスクリプトを作成したいと思います。
find /some/path/ -type f | grep -vif blacklist | mplayer -shuffle -playlist -
blacklist
アーティスト名や曲名が書かれたテキストファイルがどこにあるのか、訪問者がいるときや息子が近くにいるときは無視するほうが良いです。 (悪口がたくさん…:D)
mplayer
この文字が表示されると、-
コンソール入力は無効になります。マニュアルページから:
-noconsolecontrols
Prevent MPlayer from reading key events from standard input.
Useful when reading data from standard input. This is automatically
enabled when - is found on the command line. [snip]
これにより、ファイル内で個々の曲を検索したりスキップしたりできなくなります。興味深いことに、これはビデオウィンドウでまだ一般的なキーボード入力を可能にするので、ビデオに適用されます。
一般的なコンソール入力をどのように復元できますか?もちろんこれが最も簡単な解決策ですが、一時ファイルを使用するのを避けたいと思います。-slave
そして-input
それは合わないようで頑張っても-consolecontroles
効果がないようです。
ベストアンサー1
標準入力ではなくファイル記述子に入力を提供します。
find /some/path/ -type f | grep -vif blacklist |
mplayer -shuffle -playlist /dev/fd/3 3<&0 </dev/tty
最後の行の説明:grepのデータは標準入力から得られます。ファイル記述子0. シェルから標準入力以外のものにパイプする方法はありませんが、いくつかの追加のパイピングを実行できます。まず、ファイルディスクリプタ3をファイルディスクリプタ0の場所にリンクします3<&0
。次に、ファイル記述子0(つまり標準入力)を端末に接続します</dev/tty
。私たちはmplayerにファイルディスクリプタ3からプレイリストを読むように指示します。 mplayerはファイル名を期待しているので、それをに渡してプロセスがファイルを開くと、そのプロセスの/dev/fd/3
ファイル記述子3のように動作します。
リダイレクトの順序は重要であり、直観が間違っている場合は直観に反する可能性があります。3<&0 </dev/tty
fd 3はfd 0が以前に読み取った場所から読み取られ、fd 0はから読み取られます/dev/tty
。</dev/tty 3<&0
fd 0とfd 3は同時に読み取られます/dev/tty
。