“комната” не принимает внутреннюю команду как параметр

Почему это не работает?

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 не принимает?

5
задан 11 May 2012 в 21:15

4 ответа

Посмотрите тесно, и Вы заметите, что это встроило одинарные кавычки, которые необходимо будет удалить сами. Я изменился бы awk на sed:

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

(Хотя на самом деле я посмотрел бы на точно, на что неизмененный вывод gsettings похож сначала, чтобы сделать что-то более пуленепробиваемым.)

6
ответ дан 22 October 2019 в 17:24

Похоже, что у Вас есть дополнительная пара символов одинарной кавычки вокруг Вашего имени файла, которое должно быть неизолированным.

Здесь, мне назвали файл "привет":

$ 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 окружить выражения замены и поиск. Обычно, Вы использовали бы / но в этом случае легче использовать что-то еще, таким образом, я использую |.
10
ответ дан 22 October 2019 в 17:24

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')
3
ответ дан 22 October 2019 в 17:24

Это работало бы также (хотя не особенно безопасный):

eval rm $(gsettings get org.gnome.desktop.background picture-uri  | awk '{gsub("file://","");print $0}')
0
ответ дан 23 November 2019 в 08:39

Другие вопросы по тегам:

Похожие вопросы: