& Ldquo; & Rdquo; не принимает внутреннюю команду в качестве параметра

1) Если libfoo является зависимостью, то apt-get install libfoo установит только версию, совместимую с другим приложением, используя ее.

2) Если вы удалите панель, а другое приложение не использует libfoo, будет удаляться с помощью apt-get autoremove.

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

6 ответов

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

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

(хотя на самом деле я хотел бы посмотреть, что именно немодифицированный вывод gsettings выглядит как первый, чтобы что-то сделать более пуленепробиваемый.)

6
ответ дан 25 May 2018 в 11:34
  • 1
    работает. большое спасибо. – Vojta 11 May 2012 в 19:34
  • 2
    Как отметил mgd в комментарии к его ответу, это не совсем правильно - имена файлов могут содержать одинарные кавычки, поэтому удаление всех из них неверно. – Izkata 11 May 2012 в 23:16
  • 3
    @Izkata, это (и ряд подобных проблем) - это то, что я имел в виду под комментарием о том, как смотреть на фактический вывод и бронезащиту. – geekosaur 11 May 2012 в 23:19
  • 4
    Ну, так как его цель - просто удалить обои, это не очень важно, и я могу жить с возможностью того, что будет такой файл, который не будет удален ... – Vojta 12 May 2012 в 16:02
  • 5
    Вы правы, но в другой раз это будет не быть обоями. Таким образом, чтобы правильно отбросить символы ', вы должны использовать see, как это sed -e "s|^'file://\(.*\)'$|\1|g", или, может быть, легче читать sed -e "s|^'file://||g" -e "s|'$||". Обратите внимание, что ^ соответствует началу строки, а $ соответствует концу строки. Я уточню свой ответ. – mgd 12 May 2012 в 16:54

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

Здесь у меня есть файл с именем «hello»:

$ ls
hello

Попытка удалить его с помощью дополнительных одинарных кавычек, таких как:

$ rm "'hello'"

дает точно сообщение об ошибке:

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

\' до и после

EDIT:

В вашем случае (как заметил еще один ответчик) вывод

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|'$||"
[d10 ] Обратите внимание:

^ соответствует началу строки $ соответствует концу строки. любой символ может использоваться в sed, чтобы окружить поиск и заменить выражения. Обычно вы используете /, но в этом случае проще использовать что-то другое, поэтому я использую |.
10
ответ дан 25 May 2018 в 11:34
  • 1
    Большое спасибо за быстрый и правильный ответ. Он работает сейчас. Я напишу здесь результат. – Vojta 11 May 2012 в 19:29
  • 2
    Я не могу прокомментировать ответ, который в настоящее время помечен как правильный, поэтому я напишу свой комментарий здесь. Пожалуйста, будьте осторожны, not , чтобы вырезать каждый символ ', как было предложено, но только те, которые окружают ваше имя файла (в редком случае, когда ваше имя файла содержит одну цитату - редко, но видно). – mgd 11 May 2012 в 20:34

gsettings get org.gnome.desktop.background picture-uri возвращает результат, подобный:

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

Эти одиночные кавычки на концах - это ваше уничтожение: -)

I ' Предположим, вы используете awk по какой-то причине и даете вам два простых решения, которые разделяют кавычки, прежде чем подавать вывод gsettings в awk:

cut -d "'" -f2 tr "'" " " [!d4 ]

Прикрепите их посередине, и вы закончите, например:

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
ответ дан 25 May 2018 в 11:34
  • 1
    Благодарю. Мне потребовалось некоторое время, чтобы узнать, как снять кавычки, и у вас есть еще больше решений :) – Vojta 11 May 2012 в 19:41
  • 2
    Каковы обратные точки вокруг cut -d "'" -f2 и tr "'" " "? Если они предназначены, я не уверен, что эти команды должны делать. Рассматривая уценку этого ответа, похоже, что они могут быть опечатками - форматирование блочного кода достигается несколько необычным образом. Если они не предназначены, то этот ответ имеет смысл, но с ошибкой (предположительно экранированный) ' на выходе gsettings. Затем текст отключается. См. Также соответствующий недостаток в принятом ответе . – Eliah Kagan 5 January 2017 в 06:42

Это тоже сработает (хотя и не особенно безопасно):

eval rm $(gsettings get org.gnome.desktop.background picture-uri  | awk '{gsub("file://","");print $0}')
0
ответ дан 25 May 2018 в 11:34

gsettings get org.gnome.desktop.background picture-uri возвращает результат, подобный:

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

Эти одиночные кавычки на концах - это ваше уничтожение: -)

I ' Предположим, вы используете 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
ответ дан 4 August 2018 в 16:38

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

Здесь у меня есть файл с именем «hello»:

$ ls
hello

Попытка удалить его с помощью дополнительных одинарных кавычек, таких как:

$ rm "'hello'"

дает точно сообщение об ошибке:

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

\' до и после

EDIT:

В вашем случае (как заметил еще один ответчик) вывод

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
ответ дан 15 August 2018 в 19:23
  • 1
    Большое спасибо за быстрый и правильный ответ. Он работает сейчас. Я напишу здесь результат. – Vojta 11 May 2012 в 19:29
  • 2
    Я не могу прокомментировать ответ, который в настоящее время помечен как правильный, поэтому я напишу свой комментарий здесь. Пожалуйста, будьте осторожны, not , чтобы вырезать каждый символ ', как было предложено, но только те, которые окружают ваше имя файла (в редком случае, когда ваше имя файла содержит одну цитату - редко, но видно). – mgd 11 May 2012 в 20:34

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

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