“rm” não aceita comandos internos como um parâmetro

5

Por que isso não funciona?

rm $(gsettings get org.gnome.desktop.background picture-uri  | awk '{gsub("file://","");print $0}')
rm: cannot remove '\'/home/foggy/obrazky/wallpapers/24/Dark_Oxygen_by_Falco101.png\'': No such file or directory

Talvez haja algum caractere que rm não aceite?

    
por Vojta 11.05.2012 / 16:11

4 respostas

6

Observe atentamente e você perceberá que ele contém aspas simples incorporadas, que você terá que remover. Eu mudaria o awk para um sed :

rm $(gsettings get org.gnome.desktop.background picture-uri |
     sed -e "s/'//g" -e 's,file://,,g')

(Embora, na verdade, eu olhe exatamente como a saída não modificada de gsettings parece primeiro, para tornar algo um pouco mais à prova de balas.)

    
por geekosaur 11.05.2012 / 16:22
10

Parece que você tem um par extra de caracteres com aspas simples em torno do nome do arquivo que precisa ser removido.

Aqui, eu tenho um arquivo chamado "olá":

$ ls
hello

Tentando excluí-lo com aspas simples extras assim:

$ rm "'hello'"

mostra exatamente a mensagem de erro que você vê:

rm: cannot remove '\'hello\'': No such file or directory

o \' antes e depois do nome são aspas simples que você precisa remover.

EDITAR:

No seu caso (como outro respondente observou) a saída de

gsettings get org.gnome.desktop.background picture-uri

retorna um resultado como:

'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'

Assim, você deseja remover o 'file:// inicial e o final ' . Isso pode ser feito corretamente usando sed assim (usando apenas uma expressão com um grupo)

sed -e "s|^'file://\(.*\)'$||g"

ou talvez mais fácil de ler (usando duas expressões simples)

sed -e "s|^'file://||g" -e "s|'$||"

Por favor, note:

  • ^ corresponde ao início da linha
  • $ corresponde ao final da linha.
  • qualquer caractere pode ser usado em sed para cercar a pesquisa e substituir expressões. Normalmente, você usaria / , mas nesse caso é mais fácil usar outra coisa, então eu uso | .
por mgd 11.05.2012 / 16:22
3

gsettings get org.gnome.desktop.background picture-uri retorna um resultado como:

'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'

Essas aspas simples nas extremidades são sua ruína: -)

Suponho que você esteja usando o awk por um motivo e forneça duas soluções simples que eliminem as aspas antes de alimentar a saída de gsettings to awk :

  • cut -d "'" -f2
  • tr "'" " "

Coloque-os no meio e pronto, por exemplo:

rm $(gsettings get org.gnome.desktop.background picture-uri |   
'cut -d "'" -f2' | sed -e "s/'//g" -e 's,file://,,g')

rm $(gsettings get org.gnome.desktop.background picture-uri |   
'tr "'" " "' | sed -e "s/'//g" -e 's,file://,,g')
    
por ish 11.05.2012 / 16:35
0

Isso também funcionaria (embora não seja particularmente seguro):

eval rm $(gsettings get org.gnome.desktop.background picture-uri  | awk '{gsub("file://","");print $0}')
    
por jlliagre 11.05.2012 / 19:59