Я новичок в Perl, так что терпите меня. Спасибо за помощь.
У меня есть машина Ubuntu с Perl. Я выполнил руководство по начальной загрузке local :: lib
Я использовал cpanm для установки DBI и других модулей в свою систему. Я обеспокоен тем, что в моей системе могут быть другие модули DBI, которые могут быть частью проблемы. Это результат find / -name 'DBI.pm' 2>/dev/null
:
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/Bundle/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/lib/Bundle/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Bundle/DBI.pm
Я добавил 2 строки в свой файл .bashrc. (Я добавил вторую строку, потому что я сломал что-то для пользователя без полномочий root, и это исправило; может быть, я что-то сломал с помощью local :: lib?)
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
PERL5LIB="/home/ubuntu/perl5/lib/perl5"
Я могу запустить свой Perl-скрипт как пользователь без полномочий root. Если я запускаю с sudo perlScript.pl
, я получаю эту ошибку: Can't locate DBI.pm in @INC (you may need to install the DBI module)
Я уже какое-то время занимаюсь устранением неполадок @INC и не могу понять, как настроить его для пользователя root. Я пробовал разные вещи, включая добавление PERL5LIB в .profile и вызов моего скрипта следующим образом: sudo sh -c '. ~/.profile; perl ~/perlScripts/perlScript.pl "argForScript"'
(я подтвердил, что PERL5LIB устанавливается с sudo sh -c '. ~/.profile; echo $PERL5LIB'
)
Однако я всегда получаю сообщение об ошибке @INC. Самая очевидная вещь, которую я заметил, - это сравнение sudo perl -V
и perl -V
. Вызов sudo не показывает никаких переменных ENV, а @INC не включает желаемое расположение PERL5LIB. Не-sudo вызов действительно показывает желаемые переменные ENV и @INC.
Я подумываю о том, чтобы стереть данные и выполнить новую установку с привилегиями root для local :: lib и cpan. Не совсем уверен, что еще попробовать на этом этапе.
sudo
? Когда вы установилиlocal::lib
, вы установили его для пользователяubuntu
, поэтому он не будет работать для другого пользователя, такого какroot
- person Håkon Hægland   schedule 09.02.2021perlbrew
может помочь с этим. - person ikegami   schedule 09.02.2021