請問..我將寫好的perl script 放入到 /usr/bin/xxx.pl裡
然我在在CLI裡 輸入 XXX.PL 會出現ERR訊息
-bash: /usr/bin/pop3: /usr/bin/perl^M: bad interpreter: 沒有此一檔案或目錄
是什麼原因...我打開/usr/bin/裡的一些perl腳本..也執行系統原存在的perl腳本,執行它們都不會出現上述的err訊息....
因為我要在 radius 的 users設定檔裡..加上
DEFAULT Auth-Type = Accept, User-Name =~ "@mail.km.edu.tw"
<span style="color: #FF0000;">Exec-Program-Wait ="/usr/bin/xxx.pl mail.edu.tw %u %{Password}"</span>
Fall-Through = 1,
PS:另有一個問題是..我在radius server 的 users上面有設定了User-Name =~ "@mail.km.edu.tw" 導致了,我現在
只要在web認證畫面上只要內容有打"@mail.km.edu.tw,不管帳密如何..它竟然都能通過認證...= =|||
實在是不知要如何改...如有經驗的前輩還請指點一下...感恩...
看起來你的perl script第一行(#!/usr/bin/perl)多了一個dos/windows的分行符號,把他去掉試試看。
感謝你的回應..修改好之後就沒第一個問題了...
不過卻延伸另一個問題..
Can't call method "login" on an undefined value at /usr/bin/pop3 line 12.
可否再指點一下..如何解決..
第一行是用來指定 Interrupter的路徑檔案
那個^M是 DOS/Windows才有的分行符號,請去掉。
另外,您要不要貼出 Code 讓大家看看呀。要不然人家怎麼知道第12行或是其他行出了問題?
use Net::POP3;
my $hostname=$ARGV[0];
my $username=$ARGV[1];
my $password=$ARGV[2];
$pop = Net::POP3->new($hostname);
if($pop->login($username,$password)){
print "give radius variable";
}else{
print "login fail";
}
$pop->quit;
你$username、$password應該沒定義過吧!
(1) 原程式, 只要你有確實餵給它 3 個參數, 它就應該是 okay 的才是.
如: perl test.pl pop3Server username passwd
(2) 避免有 Windows 換行字元
可以用 cat -t test.pl 來驗證, 如果有看到 ^M 就是有 windows 換行字元.
消去方式, 常用的有兩種..
[1] 使用 dos2unix command
如: dos2unix test.pl
[2] 使用 col command
如: cat test.pl | col -b > newfile
(3) =~ 是 perl 的RE, 看起來你不太了解它, 請啃啃文件先.