Por que meu script Perl funciona bem no Windows, mas não no Ubuntu?

0

Meu script Perl funciona bem na linha de comando do Windows, mas não consegui executá-lo no Ubuntu. Eu tentei com um script Perl simples, mas ele está me dando uma mensagem de erro:

can't open perl script "testl.pl" inpute/output error.

Aqui está o script que usei para testar e salvá-lo como test.pl:

#!/usr/bin/perl
print "content-type: text/html \n\n";
print "hello worrld\n";

Alguém pode me ajudar a consertar isso?

    
por Kiflu 18.10.2016 / 03:31

1 resposta

2

Você executou um script test.pl , mas não executou o que você postou. Você aparentemente executou um script que está em seu PATH, enquanto o script que você postou não está em seu PATH.

Não há nada no script que você postou que produza a saída que você postou na sua pergunta.

O script que você postou funciona bem no Ubuntu. Estas são as coisas que você precisa garantir ao executar um script no Ubuntu.

Executando Scripts no Linux

Você pode chamar o script usando o nome do intérprete. Neste caso:

$ perl test.pl
$ perl /home/user/test.pl

Isso executará o script que está atualmente no mesmo diretório em que o comando é chamado ou encontrado na variável Path. Este método não pesquisará a variável PATH . Se o script não estiver localizado na pasta atual, você deverá fornecer um nome de caminho completo para o script ser executado.

O script não precisa ter o cabeçalho shebang ( #!/usr/bin/perl ).

Definindo o bit de execução

Você pode definir o bit exec com:

$ chmod +x test.pl

Em conjunto com o bit de execução, também será necessário o cabeçalho shebang. Se o bit exec for definido, o script pode ser chamado pelo nome do arquivo. Ele só executará um script encontrado na variável PATH . O primeiro localizado pela ordem no PATH será executado. Ao contrário do Windows que você disse que funciona, por padrão (e por razões de segurança) o diretório atual . não está no caminho do usuário e não será pesquisado . Você pode verificar sua variável de caminho executando:

 $ echo $PATH

O script será executado se estiver localizado em um desses (entre outros) locais de pesquisa de caminho padrão:

~/bin
/usr/local/bin

Se o script não estiver em um diretório da variável PATH, você deverá especificar o nome completo do caminho para executá-lo:

$ ./test.pl
$ /home/userid/test.pl

Identificando qual script está sendo localizado

Você pode verificar a localização de um script que está sendo executado com este comando:

$ type test.pl

Isso mostrará o nome completo do caminho do primeiro script test.pl localizado. Se houver vários scripts em diferentes PATHs, você poderá exibir todos eles com este comando:

$ type -a test.pl

Nesse caso, se houver vários scripts com o mesmo nome, chamar o script pelo nome de caminho completo seria o melhor método. Um script com um nome tão comum como test.pl deve sempre ser chamado pelo nome do caminho completo para garantir que o correto esteja sendo executado.

    
por L. D. James 18.10.2016 / 07:04