5 votes

"rm" n'accepte pas la commande interne comme paramètre

Pourquoi ça ne marche pas ?

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

Peut-être qu'il y a un caractère qui rm n'accepte pas ?

10voto

mgd Points 3648

Il semble que vous ayez une paire supplémentaire de caractères guillemets simples autour de votre nom de fichier qui doivent être supprimés.

Ici, j'ai un fichier nommé "hello" :

$ ls
hello

J'essaie de le supprimer avec des guillemets simples supplémentaires comme ceci :

$ rm "'hello'"

donne exactement le message d'erreur que vous voyez :

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

le site \' avant et après le nom sont des guillemets simples que vous devez enlever.

EDITAR:

Dans votre cas (comme l'a noté un autre répondant), la sortie de l'application

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

renvoie un résultat comme :

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

Donc vous voulez enlever le début 'file:// et la fin ' . Cela peut être fait correctement en utilisant sed comme ceci (en utilisant une seule expression avec un groupe)

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

ou peut-être plus facile à lire (en utilisant deux expressions simples)

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

Veuillez noter :

  • ^ correspond au début de la ligne
  • $ correspond à la fin de la ligne.
  • tout caractère peut être utilisé dans sed pour entourer les expressions de recherche et de remplacement. Normalement, vous devriez utiliser / mais dans ce cas, il est plus facile d'utiliser quelque chose d'autre, donc j'utilise | .

6voto

geekosaur Points 11087

Regardez attentivement et vous remarquerez qu'il comporte des guillemets simples intégrés, que vous devrez supprimer vous-même. Je changerais le awk à un sed :

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

(Bien qu'en fait je regarderais exactement ce que la sortie non modifiée de gsettings ressemble d'abord, afin de faire quelque chose d'un peu plus résistant aux balles).

3voto

ish Points 134738

gsettings get org.gnome.desktop.background picture-uri renvoie un résultat comme :

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

Ces guillemets simples à la fin sont votre perte :-)

Je suppose que vous utilisez awk pour une raison précise et je vous propose deux solutions simples qui suppriment les guillemets avant d'alimenter la sortie de la commande gsettings a awk :

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

Collez-les au milieu et vous avez terminé, par exemple :

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

0voto

pellea72 Points 323

Cela fonctionnerait aussi (bien que ce ne soit pas particulièrement sécurisé) :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X