Почему это не работает?
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
Возможно, существует некоторый символ это rm
не принимает?
Посмотрите тесно, и Вы заметите, что это встроило одинарные кавычки, которые необходимо будет удалить сами. Я изменился бы awk
на sed
:
rm $(gsettings get org.gnome.desktop.background picture-uri |
sed -e "s/'//g" -e 's,file://,,g')
(Хотя на самом деле я посмотрел бы на точно, на что неизмененный вывод gsettings
похож сначала, чтобы сделать что-то более пуленепробиваемым.)
Похоже, что у Вас есть дополнительная пара символов одинарной кавычки вокруг Вашего имени файла, которое должно быть неизолированным.
Здесь, мне назвали файл "привет":
$ ls
hello
Попытка удалить его с дополнительными одинарными кавычками как это:
$ rm "'hello'"
дает точно сообщение об ошибке, которое Вы видите:
rm: cannot remove `\'hello\'': No such file or directory
\'
прежде и после имени одинарные кавычки, с которых необходимо снять изоляцию.
Править:
В Вашем случае (поскольку другая отвечающая сторона отметила), вывод
gsettings get org.gnome.desktop.background picture-uri
возвращает результат как:
'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'
Таким образом, Вы хотите разделить продвижение 'file://
и окончание '
. Это может быть сделано правильно с помощью sed
как это (использование только одного выражения с группой)
sed -e "s|^'file://\(.*\)'$|\1|g"
или возможно легче читать (использование двух простых выражений)
sed -e "s|^'file://||g" -e "s|'$||"
Пожалуйста, примите во внимание:
^
соответствует началу строки $
соответствует концу строки.sed
окружить выражения замены и поиск. Обычно, Вы использовали бы /
но в этом случае легче использовать что-то еще, таким образом, я использую |
. gsettings get org.gnome.desktop.background picture-uri
возвраты результат как:
'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'
Те одинарные кавычки в концах являются Вашей отменой :-)
я предположу, что Вы используете awk по причине и даете Вам два простых решения, которые разделяют кавычки прежде, чем подать вывод gsettings
к awk
:
cut -d "'" -f2
tr "'" " "
Засовывают их в середине, и Вы сделаны, например:
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')
Это работало бы также (хотя не особенно безопасный):
eval rm $(gsettings get org.gnome.desktop.background picture-uri | awk '{gsub("file://","");print $0}')