KDEからプロンプトでflacファイルを分割するデスクトップファイル提供タスクを作成しようとしていますが、いくつかの端末を開いてプロセスを表示し、理想的には閉じるのを待ちます(潜在的なエラーチェックのため)。
これまで、次のデスクトップファイルがあります。
[Desktop Entry]
Type=Service
Encoding=UTF-8
ServiceTypes=KonqPopupMenu/Plugin,audio/x-flac,audio/x-flac+ogg,audio/x-oggflac
Icon=soundconverter
Actions=SplitFlacByCue;
[Desktop Action SplitFlacByCue]
Terminal=true
Name=split flac by cue
Icon=soundconverter
Exec=bash -c '$(file=$(basename "%f"); filename="${file%.*}"; shntool split -f \'$filename.cue\' -o \'flac flac --output-name=%f -\' -t \'%n - %p - %t\' \'$filename.flac\')'
端末もなく、エラーもありません。 shntool部分のために失敗し、$ filename変数を渡すことはできません。いろいろなバリエーションを試してみましたが、正しい方法が見つからなかったようです。
誰でも私を助けることができますか?ありがとうございます。
[編集する]
簡単に言うと、同じ名前のプロンプトでflacを分割するExecパラメータのスクリプトを含むデスクトップファイルが必要です(もちろん拡張子を除く)。 flac ファイルを右クリックするとファイルが表示されます。ここでの問題は、.shファイルの代わりにExecエントリでこれを行う方法です。
私はこのポイントに達しました:
Exec=xterm -e 'file=$(basename "%f"); filename="${file%.*}"; echo $filename; shntool split -f \""${filename}".cue\" -o '\''flac flac --output-name=%f -'\'' -t '\''%n - %p - %t'\'' \""${filename}".flac\"; bash\'
ただし、アクションがトリガーされるとアイテムを解析できないという一般的なエラーが発生します。
Execフィールドの処理中にエラーが発生しました。
問題はshntool部分にあります。これを削除すると、xtermが開き、変数の値が印刷されます。
2回目の試み:
Exec=xterm -e 'file=$(basename "%f");ファイル名= "${file%.*}"; echo $ファイル名 -f \""$filename".cue\" - o "'"flac flac --output-name=%f -"' -t "'"%n - %p - %t"' "\""$filename".flac\";thump'
結果:
作成者 - タイトル shntool [分割]: 警告: 存在しないコンテンツを開けません。
ファイル:["author - title.flac"] shntool [split]:エラー:上記のエラーのため続行できません。
それでも、私はこのエラーの理由を理解していません。
[1週間後...]
解決策は次のとおりです。
[Desktop Entry]
Type=Service
Encoding=UTF-8
ServiceTypes=KonqPopupMenu/Plugin,audio/x-flac,audio/x-flac+ogg,audio/x-oggflac
Icon=soundconverter
Actions=SplitFlacByCue;
[Desktop Action SplitFlacByCue]
Terminal=true
Name=split flac by cue
Icon=soundconverter
Exec=xterm -e 'path=$(dirname "%f"); echo $path; file=$(basename "%f"); filename="${file%.*}"; echo $filename; shntool split -D -f """$filename".cue"" -o "'"flac flac --output-name=%%f -"'" -t "'"%%n - %%p - %%t"'" """$filename".flac""; bash'
答え1
私は次の3つの質問を見ています。
- 実行レベルが多すぎるようです。まず実行し
shntool
てから実行します。出力shntool
(そのbash -c
部分)。おそらくそれがあなたが望むものですbash -c 'file=[...]'
。 - ここでコマンドラインがどのように解析されるかはわかりませんが、Bashではできない一重引用符内のどこでも一重引用符をエスケープするには、次のようにします。
$''
または""
引用符代わりに。 会ったばかりシェルと端末の違い。
bash
(グラフィックコンポーネントのないシェル)を実行する代わりにgnome-terminal
、terminator
または同じ端末を実行する必要がありますxterm
(これらのうちの1つ以上が必要です)。xterm -e 'echo "Hello World"; sleep 5s'
たとえば、新しい端末ウィンドウが開き、両方のコマンドを実行した後、最後のコマンドが完了すると終了します。コマンドが完了した後もウィンドウを開いたままにするには、最後のコマンドとしてシェルを追加できます。xterm -e 'echo "Hello World" 5秒間スリープする';