我已經寫了這個Perl腳本來自動我的無線連接:Perl腳本不執行一些外部呼叫
#!/usr/bin/perl
use strict;
my @modes = ("start", "stop");
my $mode = $modes[0];
my $kill_command = "sudo kill -TERM ";
sub check_args
{
if($#ARGV != 0)
{
print(STDERR "Wrong arguments\n");
print(STDERR "Usage: ./wicd.pl start|stop\n");
exit();
}
my @aux = grep(/^$ARGV[0]$/, @modes);
if ([email protected])
{
print(STDERR "Unknown argument\n");
print(STDERR "Usage: ./wicd.pl start|stop\n");
exit();
}
$mode = $ARGV[0];
}
check_args();
my @is_wicd_running = `ps -A | grep wicd`;
# START
if ($mode eq $modes[0])
{
if ([email protected]_wicd_running)
{
system("gksudo ifconfig wlan0 down");
system("sudo macchanger -r wlan0");
system("sudo wicd");
}
my @is_wicd_gui_running = grep(/wicd-client/, @is_wicd_running);
if ([email protected]_wicd_gui_running)
{
system("gksudo wicd-gtk &");
}
}
# STOP
else
{
for (@is_wicd_running)
{
my @aux = split(/ /, $_);
system("$kill_command$aux[1]");
}
system("sudo ifconfig wlan0 down");
}
的問題是,macchanger和須藤使用ifconfig爲wlan0下不執行(只有那些...)。奇怪的是,這些調用在通過Perl調試器(perl -d)調用腳本時執行。我認爲這可能是一個計時問題,並在這些調用之前添加了一些sleep()調用,但沒有改變。我也嘗試使用system()調用,並且沒有任何更改。
編輯:更奇怪,我發現,如果我運行腳本perl的wicd.pl其正常運行,而./wicd.pl不(它運行但上述問題) 。我附上了整個腳本。標頭上使用的Perl解釋器與perl命令返回的相同。
任何線索?提前致謝!
試試我的$ out = qx(sudo ifconfig wlan0 down); – Gilbert
'gksudo/sudo'提示輸入密碼? – TLP
是的。如果不是這樣的話,沒有一個命令可以工作。事實上,我再次修改了腳本,刪除了所有的sudo/gksudo,並像sudo/gksudo ./wicd.pl一樣調用它,看起來更乾淨恕我直言(後面我會編輯問題)。仍是同樣的問題。 – m0skit0