Я не вижу никакого способа сделать это легко. Вам нужно будет передать вывод complete -p
из родительской оболочки в дочерние оболочки.
Для начала это позволяет вам вводить дополнительные команды в подоболочку:
$ bash --rcfile <(echo '. ~/.bash_profile')
Теперь, если мы попытаемся ввести complete -p
в это, вот так:
$ bash --rcfile <(echo '. ~/.bash_profile'; while read line; do echo "$line"; done < <(complete -p))
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name...]
Это почти работает, кажется, что он спотыкается на поступающих командах complete
. Попытка использовать файл в качестве промежуточного звена также не сработала:
$ complete -p > /tmp/cmp.txt; bash --rcfile <(echo '. ~/.bash_profile'; echo '. /tmp/cmp.txt')
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name...]
Попытка понять, почему он терпит неудачу, на самом деле не проливает много дополнительного света на вещи. Здесь я включаю подробный вывод из bash через-set -x
:
$ bash
$ set -x
Затем мы получаем файл, который создали секунду назад:
$. /tmp/cmp.txt
+. /tmp/cmp.txt
++ complete -F _manila manila
++ complete -F _minimal
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name...]
++ complete -F _command time
++ complete -F _command do
++ complete -o bashdefault -o default -o nospace -F __git_wrap_git_checkout gcob
Таким образом, если не прибегать к какой-либо хитрости, похоже, что данные, содержащиеся в выводе complete -p
, в данном конкретном случае не переносимы.
У меня возникли проблемы с ошибкой сегментации в Xsane при использовании моего USB-сканера HP4200 после обновления до Ubuntu 20.04 с Ubuntu 18.04.
Я нашел множество предложений Google, которые не помогли.Я настроил и скомпилировал серверную часть для HP4200, но она все равно давала сбой.
Я включил отладочные сообщения в исходном коде и обнаружил, что отладочные сообщения говорят мне, что происходит сбой всегда в одном и том же месте
подпрограмма с именем do_fine_calibration
в файле hp4200.c
. В этой подпрограмме вызывается memset
, и оказалось, что именно здесь произошел сбой.
Если memset
вызывается с нулевым указателем, он пытается получить доступ к несуществующей памяти. Я пытался выяснить, делает ли Ubuntu 20.04 что-то другое в управлении памятью, но ничего не нашел.
В любом случае, казалось, что этот код устанавливает большой массив с именем registro, для которого не существует указателя!
Я не гуру управления памятью, но после некоторых исследований я решил изменить объявление реестра, чтобы установить его в 0 при объявлении (о строке 1377-int registro[30][5460 * 3] = {0};
с моей сдачей)
, а затем удалите секцию кода (строку 1496 -около 1505 ), которая mem устанавливает массив регистров в 0.
После повторного ./configuration
, make sudo make install
и запуска скан-изображения для сканирования, о чудо, двигатель взлетел и снова начал сканирование!