Bash 스크립트가 Perl 모듈을 찾을 수 없습니다

Bash 스크립트가 Perl 모듈을 찾을 수 없습니다

실행되지 않는 쉘 스크립트가 있습니다메뉴 트레이시작 시 i3.

라인 입력 .i3/config:

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

디버깅을 시도하는 방법은 다음과 같습니다.

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

콘텐츠 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.

하지만 나는 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

입증하다:

$ 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내 변수 .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;

누구든지 도와줄 수 있나요?

답변1

오류 메시지에서 볼 수 있듯이 /home/me/.cpan/buildPerl 설치에 추가해야 합니다 .@INC

(@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 .)

PERL5LIB가장 쉬운 방법은 ~/.profile(또는 ~/.bash_profile) 파일에서 이를 설정하는 것입니다.

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

그런 다음 파일( . ~/.profile)을 가져오거나 로그아웃했다가 다시 로그인하세요.

이렇게 하면 스크립트를 수동으로 실행할 수 있지만 .i3/config를 통해 실행할 때 스크립트 .profile가 작동하는지 확인하려면 PERL5LIB스크립트 자체에서 이를 명시적으로 설정해야 합니다.

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

관련 정보