Сохраняется справочный файл автозаполнения в /etc/bash_completion.d/pmount
в моей системе.
Решение 1. (Повторное) перемещение / переименование файла
По предложению Тома Ханта, это самое простое решение. Зависание прекращается, однако автозаполнение работает неразумно, т. Е. Придерживается имен файлов в текущем каталоге.
Решение 2. Восстановление файла автозаполнения
Проблема со справочным файлом возникает в функции _pmount ()
в строке 62 файла (добавлены новые строки для удобства чтения - не в исходном файле):
devices="$( command ls $(grep -v '^[[:space:]]*#' /etc/pmount.allow )\
$(grep 1 /sys/block/*/removable |\
sed -e 's,/sys/block/,/dev/,;s,/removable:1,*,') 2>/dev/null |\
sort -u | sed -e 's,\(^/dev/\)\(.*\),\1\2 \2,' ; \
#this last line is of interest, as the errors occur here
grep $mdir /proc/mounts | sed -e 's,.*\($mdir/[^ ]*\).*,\1,' )"
с ошибкой, заключающейся в том, что для
grep $mdir /proc/mounts
переменная $ mdir
не определена ранее, и поэтому сценарий зависает.
Итак, я добавил определение mdir
mdir="$(readlink -f /media)"
, взятое из функции _pumount ()
того же скрипта (см. Строку 75), например, в строка 36 как mdir
, похоже, означает m edia (или m ount) dir ectory, т.е.стандартная точка монтирования для pmount
. Кроме того, я также добавил mdir
в локальные переменные функции _pmount ()
(строка 25) из соображений безопасности.
Автозаполнение теперь перестает зависать, но если раздел съемного диска смонтирован, он ведет себя странно, поскольку затем показывает подключенный диск, его точку монтирования и всю информацию из / proc / mounts
, например:
/media/sdc1
rw,nosuid,nodev,noexec,relatime,uid=1000,gid=1000,fmask=0177,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,quiet,utf8,errors=remount-ro
Это связано с той же самой строкой 62, где произошла ошибка, теперь проблема заключается в этой части:
grep $mdir /proc/mounts | sed -e 's,.*\($mdir/[^ ]*\).*,\1,'
где команда sed
должна завершиться неудачно (т.е. команда), поскольку одинарные кавычки подавляют оценку $ mdir
, поэтому я заменил их на двойные кавычки:
grep $mdir /proc/mounts | sed -e "s,.*\($mdir/[^ ]*\).*,\1,"
pmount
автозаполнение теперь пропускает информацию из / proc / mounts
, но по-прежнему показывает уже смонтированные разделы, включая точку монтирования / media / sdc1
.
Я не могу сказать, что является стандартным поведением pmount
, но я сделал следующее, чтобы фактически подавить перечисление любых разделов, которые уже были смонтированы, опять же, начальная строка 62 теперь изменена на (добавлены новые строки для удобства чтения - следует удалить в скрипте автозаполнения):
devices="$( command ls $(grep -v '^[[:space:]]*#' /etc/pmount.allow )\
$(grep 1 /sys/block/*/removable |\
sed -e 's,/sys/block/,/dev/,;s,/removable:1,*,') 2>/dev/null |\
sort -u | sed -e 's,\(^/dev/\)\(.*\),\1\2 \2,' \
#previous block identical to original script
#the following pipe replaces a semicolon from the original script
#and so does anything that follows
| grep -v "$( if [[ $( grep $mdir /proc/mounts ) ]] ;
then grep $mdir /proc/mounts |\
sed -e "s,.*\($mdir/[^ ]*\).*,\1," \
-e "s,$mdir/,," -e 's, ,\|,g' ;
else echo $mdir ; fi \
)"
)"
Теперь, в отличие от исходного скрипта, выходные данные первых двух grep
направляются в grep
, где уже смонтированные разделы фильтруются по сравнению с любыми монтировками в / media
, взятыми из / proc / mounts
.Цикл if
необходим для различения случаев пустого / media
и случая с уже смонтированными разделами.
С этими изменениями pmount
будет вести себя, как показано ниже:
pmount <TAB to autocomplete>
/dev/sdc /dev/sdc1 /dev/sdc2 /dev/sr0 sdc sdc1 sdc sr0
pmount sdc1
#successful mounting of sdc1
pmount <TAB to autocomplete>
/dev/sdc /dev/sdc2 /dev/sr0 sdc sdc2 sr0
Т.е. смонтированный раздел подавляется, в то время как другой раздел диска (и сам диск) по-прежнему отображается.
Обратите внимание на важность определения mdir
в качестве первого шага!
Дополнительное примечание к pmount
Обратите внимание, что это автозаполнение сканирует / sys / block / * / remoable
для 1
, т.е. перечисляет только устройства, у которых съемный бит набор. Однако другие приводы могут быть установлены, введя их, например, через pmount / dev / sdd1
, они просто не будут отображаться при автозаполнении. AFAIK это предполагаемое поведение, и я сохраню его как есть. В моем случае это происходит с внешним жестким диском, на котором у меня работает раздел ext4
.
Это проблема конкретного сайта. Бег
wget -H -p -r --user-agent="Mozilla/5.0" -nd --accept jpg,png https://suzuki88.mforos.com/194412/11461305-brico-con-mi-nuevo-suzuki-en-proceso-de-transformacion-muchas-fotos/
дает мне список robot.txt. *файлы с содержимым:
User-agent: *
Disallow:
, что в основном означает, что веб-сайт думает, что вы робот, пытающийся исправить некоторые уязвимости безопасности сайта. И правило состоит в том, чтобы запретить*
(всем )роботам доступ к любой части сайта афаиу.