Если вывод pwd
содержит пробел или другой символ пробела, то это разделит выражение sed
как минимум на две части. Первая часть будет неполной командой s
, а вторая часть будет восприниматься как имя файла.
Это происходит потому, что подстановка команды (назад -с галочкойpwd
)не заключена в кавычки, т. е. происходит вне любой одинарной или двойной кавычки.
Чтобы исправить это, заключите подстановку команды в двойные кавычки:
sed 's?^?'"$(pwd)"'/VOCdevkit/VOC2012/JPEGImages/?; s?$?.jpg?' test.txt
Вы также можете использовать переменную $PWD
:
sed 's?^?'"$PWD"'/VOCdevkit/VOC2012/JPEGImages/?; s?$?.jpg?' test.txt
Однако это выглядит так, как будто вы просто добавляете имя пути и добавляете суффикс имени файла к каждой строке файла.
Это можно сделать безопаснее, используяawk
:
awk '{ printf("%s/VOCdevkit/VOC2012/JPEGImages/%s.jpg\n", ENVIRON["PWD"], $0) }' test.txt
Это будет работать, даже если $PWD
или строки, прочитанные из test.txt
, содержат ?
, пробелы или строки, которые можно интерпретировать как регулярные выражения.
Тестирование:
$ pwd
/tmp/shell-yash.Oeo3joN3
$ cat test.txt
hello world
sunny afternoon
bumbling bees
$ awk '{ printf("%s/VOCdevkit/VOC2012/JPEGImages/%s.jpg\n", ENVIRON["PWD"], $0) }' test.txt
/tmp/shell-yash.Oeo3joN3/VOCdevkit/VOC2012/JPEGImages/hello world.jpg
/tmp/shell-yash.Oeo3joN3/VOCdevkit/VOC2012/JPEGImages/sunny afternoon.jpg
/tmp/shell-yash.Oeo3joN3/VOCdevkit/VOC2012/JPEGImages/bumbling bees.jpg
Решение:Удаление ServerName
из файла ~/.cups/client.conf.
Подробности:Я установил ServerName <URL>
в ~/.cups/client.conf для обычного пользователя. Итак, для моего обычного пользователя (не root )клиент CUPS (, который предоставляет доступные принтеры, например. to Gnome Printers )пытался получить принтеры с сервера CUPS, работающего на <URL>
. Не с моего локального сервера CUPS, который предоставлял принтер, который я добавил через веб-интерфейс CUPS.