ação de desktop com comando bash e terminal [closed]

0

Eu tento criar uma ação de serviço de arquivo desktop, no KDE, para dividir arquivos flac por sua sugestão e gostaria que ele abrisse algum terminal para exibir o processo, idealmente esperasse que eu o fechasse (para verificar o potencial erros).

Até agora eu tenho um arquivo da área de trabalho como este:

[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\')'

Não vejo nenhum terminal, nenhum erro, ele falhará devido à parte do shntool, onde não consigo passar pela variável $ filename. Eu tentei muitas variantes, mas parece que não entendi direito.

Alguém poderia me ajudar, por favor? Obrigado.

[Editar]

Simplificando: Eu preciso de um arquivo de desktop com um script no parâmetro Exec para dividir um flac por sugestão com o mesmo nome (exceto para extensão, é claro). Deve estar presente ao clicar com o botão direito em um arquivo flac. O desafio aqui é como fazê-lo em uma entrada do Exec em vez do arquivo .sh.

Eu cheguei a isto:

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\'

Mas quando a ação é acionada, ocorre um erro genérico, dizendo que não é possível analisar a entrada:

Error processing Exec field in

O problema está na parte shntool, se eu remover isso, ele abre o xterm e imprime os valores das variáveis.

Uma segunda tentativa:

Exec = xterm -e 'file = $ (nome de base "% f"); filename="$ {arquivo%. *}"; echo $ filename; shntool split -f \ "" $ nome do arquivo ".cue \" -o "'" flac flac --nome da saída =% f - "'" -t "'"% n -% p -% t "'" \ "" $ filename ".flac \"; bash '

resulta em:

author - title shntool [split]: warning: cannot open non-existent

file: ["author - title.flac"] shntool [split]: error: cannot continue due to error(s) shown above

Ainda assim, não entendi o motivo desse erro.

[Após uma semana ...]

Aqui está a solução:

[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'
    
por mike 25.06.2017 / 08:04

1 resposta

1

Eu vejo três problemas com isso:

  1. Você parece ter muitos níveis de execução - está executando primeiro shntool e, em seguida, está executando a saída de shntool (a parte bash -c ). Provavelmente você queria bash -c 'file=[...]' .
  2. Não sei ao certo como a linha de comando é analisada aqui, mas no Bash você não pode escapar de aspas simples em lugar de aspas simples - você precisará usar $'' ou "" aspas em seu lugar.
  3. Acabou de encontrar a distinção entre um shell e um terminal . Em vez de executar bash (um shell, que não possui um componente gráfico), você deverá executar um terminal como gnome-terminal , terminator ou xterm (você deve ter pelo menos um desses). xterm -e 'echo "Hello World"; sleep 5s' , por exemplo, abrirá uma nova janela de terminal, executará os dois comandos e sairá quando o último comando for concluído. Se você quiser que a janela permaneça aberta após o término do comando, você pode adicionar um shell como o último comando:

    xterm -e 'echo "Olá mundo"; dormir 5s; bash '

por 25.06.2017 / 11:46