2012-01-15 18 views

risposta

17

Il secondo colpo su "open url" at search.cpan porta in primo piano Browser::Open:

use Browser::Open qw(open_browser); 

my $url = 'http://www.google.com/'; 
open_browser($url); 

Se il sistema operativo non è supportato, inviare una patch o un bug report.

+0

Browser :: Open non funziona per Cygwin. Usa solo 'start' e non 'cygstart'. – Chloe

+1

@Chloe, sì, questo è [un bug in Browser :: Open] (https://rt.cpan.org/Public/Bug/Display.html?id=85972). Spero che venga risolto presto. – cjm

8

È possibile utilizzare la variabile $^O per identificare una piattaforma e utilizzare diversi comandi per ciascun sistema operativo.

Ad esempio:

sub open_default_browser { 
    my $url = shift; 
    my $platform = $^O; 
    my $cmd; 
    if ($platform eq 'darwin') { $cmd = "open \"$url\"";   } # Mac OS X 
    elsif ($platform eq 'linux') { $cmd = "x-www-browser \"$url\""; } # Linux 
    elsif ($platform eq 'MSWin32') { $cmd = "start $url";    } # Win95..Win7 
    if (defined $cmd) { 
    system($cmd); 
    } else { 
    die "Can't locate default browser"; 
    } 
} 

open_default_browser("http://www.example.com/"); 
+2

Perché riscrivere Browser :: Open? – cjm

+2

Dipende da dove verrà utilizzato lo script. Se si tratta di un singolo script, dovrebbe utilizzare meno dipendenze esterne per una migliore portabilità. Tuttavia i moduli possono essere associati allo script e in questo caso è meglio usare 'Browser :: Open'. – Taras

+1

Se si esegue questo comando da "git bash" $ piattaforma eq "msys" –

1

Se l'installazione del modulo CPAN Browser::Open non è un'opzione o meno desiderata, Taras' answer fornisce una buona alternativa, ma può essere migliorato nei seguenti modi:

  • fare la la funzione funziona in modo affidabile su Windows con URL che contengono metacaratteri di shell come & e ^.
  • su Windows, aggiungere il supporto per la MSYS, Git Bash, e gli ambienti Unix-emulazione Cygwin
  • aggiungere il supporto per i sistemi operativi aggiuntivi che hanno anche l'utilità xdg-open, vale a dire tutti i sistemi operativi che sono freedesktop.org compatibile, vale a dire, utilizzare le GUI che sono basati su X Window, che include piattaforme non Linux come PC-BSD (basato su FreeBSD) e OpenSolaris.
# SYNOPSIS 
# openurl <url> 
# DESCRIPTION 
# Opens the specified URL in the system's default browser. 
# COMPATIBILITY 
# OSX, Windows (including MSYS, Git Bash, and Cygwin), as well as Freedesktop-compliant 
# OSs, which includes many Linux distros (e.g., Ubuntu), PC-BSD, OpenSolaris... 
sub openurl { 
    my $url = shift; 
    my $platform = $^O; 
    my $cmd; 
    if ($platform eq 'darwin') { $cmd = "open \"$url\"";  } # OS X 
    elsif ($platform eq 'MSWin32' or $platform eq 'msys') { $cmd = "start \"\" \"$url\""; } # Windows native or MSYS/Git Bash 
    elsif ($platform eq 'cygwin') { $cmd = "cmd.exe /c start \"\" \"$url \""; } # Cygwin; !! Note the required trailing space. 
    else { $cmd = "xdg-open \"$url\""; } # assume a Freedesktop-compliant OS, which includes many Linux distros, PC-BSD, OpenSolaris, ... 
    if (system($cmd) != 0) { 
    die "Cannot locate or failed to open default browser; please open '$url' manually."; 
    } 
} 

Cygwin avvertimento: Stranamente, l'unico modo per proteggere l'URL passato a cmd.exe dall'interpretazione di caratteri. ad esempio & e ^ è a aggiungere uno spazio finale. Questo funziona in tutti i casi tranne uno, che, tuttavia, dovrebbe essere raro nel mondo reale: se l'URL contiene qualcosa come %FOO% e una variabile di ambiente denominata FOOesiste, %FOO% viene inavvertitamente espansa.

Problemi correlati