Qual é a diferença entre os comandos de atalho do teclado e os comandos bash?

3

Quando eu digito em um terminal:

gnome-screenshot -a -f /home/manuel/Desktop/"'date'".png

Eu tenho o resultado pretendido, um arquivo chamado "dimanche 10 avril 2016, 23:36:50 (UTC+0200).png" é criado.

No entanto, quando tento vincular isso a um atalho de teclado, recebo o arquivo chamado

"'date'.png"

Quando eu tento mais

bash -c "gnome-screenshot -a -f /home/manuel/Desktop/"'date'".png"

o arquivo se torna dimanche , o que significa que ele pára no primeiro espaço em branco.

Eu li que, ao citar uma variável bash, para incluir espaços em branco é preciso usar aspas, o que parece que eu fiz. Então, mais tarde, tentei atribuir o comando date a uma variável $times e usar "$times" no comando, mas com o mesmo resultado.

Então, minha pergunta é por que deve ser sempre uma dor no rabo? Se é realmente o culpado.

Obrigado, se ninguém responder, espero que a criação de um arquivo bash resolva isso como último recurso, como muitas vezes antes ...

    
por sinekonata 10.04.2016 / 23:57

2 respostas

5

Atalhos nas configurações do sistema - > "Teclado" - > "Atalhos" - > "Atalhos personalizados" não são executados em um shell.

É por isso que gnome-screenshot -a -f /home/manuel/Desktop/"'date'".png cria um arquivo chamado "'date'.png" ; a parte /home/manuel/Desktop/"'date'".png não é interpretada e é passada textualmente para gnome-screenshot , o que cria um arquivo chamado "'date'.png" .

bash -c "gnome-screenshot -a -f /home/manuel/Desktop/"'date'".png" não funciona simplesmente porque você não está escapando do segundo nível de cotações, o que faz com que o Bash execute date em uma subshell que está sujeita à divisão de palavras.

Então, é só escapar do segundo nível de citações:

bash -c "gnome-screenshot -a -f /home/manuel/Desktop/\"'date'\".png"

Ou melhor ainda, use aspas simples no comando externo para não ter que escapar de um segundo nível de citações:

bash -c 'gnome-screenshot -a -f /home/manuel/Desktop/"'date'".png'

Em uma nota secundária usando '' está obsoleta e desestimulada; seria melhor usar $() :

bash -c 'gnome-screenshot -a -f /home/manuel/Desktop/"$(date)".png'
    
por kos 11.04.2016 / 03:45
0

Crie um script executável:

Edite um arquivo, por exemplo, / usr / bin / myscreenshot com um editor de sua escolha como raiz, ou seja,

sudo vi /usr/bin/myscreenshot

Cole este conteúdo no arquivo

#!/bin/bah
gnome-screenshot -a -f "/home/$USER/Desktop/'date'.png"

Torne o arquivo um script executável:

sudo chmod +x /usr/bin/myscreenshot

Finalmente crie um atalho de teclado para este programa e isso deve ser feito.

    
por cmks 11.04.2016 / 00:18