Capturando a saída do comando scrot com su

1

Eu quero capturar o nome de um arquivo de imagem criado com scrot . Eu posso capturar o nome do arquivo assim:

$ image=$(scrot -s -e 'echo $n')
$ echo $image
2018-09-07-140419_185x76_scrot.png

Eu preciso fazer isso via su :

$ image=$(su someuser -c "scrot -s -e 'echo $n'")

No entanto, image está vazio.

Acho que esta sintaxe está correta - isso funciona:

$ greeting=$(su someuser -c "echo 'hello, world'")
$ echo $greeting
hello, world

Não sei por que isso não está funcionando com scrot . Eu presumo que tenha algo a ver com a forma como o scrot lança o seu subshell - acho que não propaga a sua saída?

    
por starfry 07.09.2018 / 15:18

1 resposta

1

O "$ n" dentro do comando -c pode ser expandido pelo shell externo, não pelo scrot. Você deve escapar:

$ image=$(su someuser -c "scrot -s -e 'echo \$n'")
    
por 07.09.2018 / 16:03