O script bash não consegue localizar o módulo perl

3

Eu tenho um script de shell que não está executando menutray na inicialização i3 .

Linha em .i3/config :

exec ~/.i3/i3-scripts/menutray.sh

Isso é o que eu tentei para depuração:

#!/bin/bash
menutray -i -u -r &>/tmp/filename

O conteúdo de filename :

Can't locate Linux/DesktopFiles.pm in @INC (you may need to install the Linux::DesktopFiles module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at /usr/local/bin/menutray line 28.
BEGIN failed--compilation aborted at /usr/local/bin/menutray line 28.

Mas tenho DesktopFiles.pm :

$ sudo find / -name 'DesktopFiles.pm'
/home/me/.cpan/build/Linux-DesktopFiles-0.09-LZFN3P/lib/Linux/DesktopFiles.pm
/home/me/.cpan/build/Linux-DesktopFiles-0.09-LZFN3P/blib/lib/Linux/DesktopFiles.pm
/home/me/.perl5/lib/perl5/Linux/DesktopFiles.pm

Evidenciado por:

$ perl -MCPAN -e 'install Linux::DesktopFiles'
Reading '/home/me/.cpan/Metadata'
  Database was generated on Tue, 23 Feb 2016 23:41:02 GMT
Linux::DesktopFiles is up to date (0.09).

perl variables no meu .bashrc :

PATH="/home/me/.perl5/bin${PATH+:}${PATH}"; export PATH;
PERL5LIB="/home/me/.perl5/lib/perl5${PERL5LIB+:}${PERL5LIB}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/me/.perl5${PERL_LOCAL_LIB_ROOT+:}${PERL_LOCAL_LIB_ROOT}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/me/.perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/me/.perl5"; export PERL_MM_OPT;

Alguém pode ajudar?

    
por Proletariat 24.02.2016 / 13:22

1 resposta

5

Você precisa adicionar /home/me/.cpan/build à @INC da sua instalação perl. Como você pode ver na mensagem de erro, não está lá:

(@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 
/usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18
/usr/share/perl/5.18 /usr/local/lib/site_perl .)

A maneira mais simples de fazer isso é definir PERL5LIB no arquivo ~/.profile (ou ~/.bash_profile ):

export PERL5LIB="/home/me/.cpan/build:$PERL5LIB"

Em seguida, faça a fonte do arquivo ( . ~/.profile ) ou efetue logout e faça login novamente.

Isso permitirá que você execute o script manualmente, mas ele ainda não estará disponível quando você executar via .i3/config , pois provavelmente ele não lê .profile . Para ter certeza de que funcionará, defina PERL5LIB explicitamente em seu próprio script:

#!/bin/bash
PERL5LIB="/home/max/.cpan/build:${PERL5LIB}" menutray -i -u -r &>/tmp/filename
    
por 24.02.2016 / 13:33