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이 열리고 변수 값이 인쇄됩니다.
두 번째 시도:
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]: 오류: 위에 표시된 오류로 인해 계속할 수 없습니다.
아직도, 나는 이 오류의 이유를 이해하지 못합니다.
[일주일 후...]
해결책은 다음과 같습니다.
[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
나는 다음 세 가지 질문을 봅니다.
- 실행 수준이 너무 많은 것 같습니다. 먼저 실행
shntool
한 다음 실행합니다.산출shntool
(그bash -c
부분). 아마도 그것이 당신이 원하는 것입니다bash -c 'file=[...]'
. - 여기서 명령줄이 어떻게 구문 분석되는지는 잘 모르겠지만 Bash에서는할 수 없다작은 따옴표 안의 어느 곳에서나 작은 따옴표를 이스케이프하려면 다음을 사용해야 합니다.
$''
또는""
인용 부호대신에. 방금 만났잖아쉘과 터미널의 차이점.
bash
(그래픽 구성 요소가 없는 셸)을 실행하는 대신gnome-terminal
,terminator
또는 같은 터미널을 실행해야 합니다xterm
(이 중 하나 이상이 있어야 함).xterm -e 'echo "Hello World"; sleep 5s'
예를 들어 새 터미널 창이 열리고 두 명령을 모두 실행한 후 마지막 명령이 완료되면 종료됩니다. 명령이 완료된 후에도 창을 계속 열어 두려면 마지막 명령으로 셸을 추가할 수 있습니다.xterm -e 'echo "Hello World" 5초 동안 잠자기';