linux - mail - ¿Cómo ejecutar correctamente los scripts de línea de comandos "one liner" de Perl?
smtp client linux (7)
Digamos que tienes las siguientes entradas:
$ for i in a b c ; do echo "$i is $i" > $i; done $ cat a b c a is a b is b c is c
¡Todos saben que las letras mayúsculas son mucho mejores!
perl -i.bak -pe ''$_ = uc'' a b c
Y ahora
$ cat a b c A IS A B IS B C IS C
Pero realmente nos gustaría poder hacerlo en un comando llamado upcase
, ¡y eso es fácil de hacer!
#! /usr/bin/perl -pi.bak
$_ = uc
Véalo en el trabajo:
$ for i in a b c ; do echo "$i is $i" > $i; done $ cat a b c a is a b is b c is c $ ./upcase a b c $ !cat cat a b c A IS A B IS B C IS C
Más consejos de una respuesta a una pregunta similar :
La opción
-e
introduce el código de Perl que se ejecutará, que podría considerarse como un script en la línea de comandos, así que suéltelo y pegue el código en el cuerpo. Deje-p
en la línea shebang (#!
).En general, es más seguro atenerse a lo más un "grupo" de opciones en la línea de shebang. Si necesita más, siempre puede lanzar sus equivalentes dentro de un bloque
BEGIN {}
.¡No olvides activar el bit de ejecución!
chmod +x script-name
Debido a que no proporcionó la única frase que desea convertir, tuve que dar una respuesta amplia y general. Si edita su pregunta para que sea específica a lo que quiere hacer, podemos darle respuestas más útiles.
He revisado varios tutoriales, pero aún no puedo entender qué estoy haciendo mal ... Estoy probando el siguiente código (en un archivo .pl de Perl, como un ejecutable):
#!/usr/bin/perl
perl -e ''print "Hello";''
Ejecuto este script y obtengo:
Ejecución de /home/user1/Desktop/file_backups.pl cancelado debido a errores de compilación.
(Soy nuevo en usar Perl para llamar a la línea de comandos de Linux).
Esto debería funcionar. Doble comillas fuera de comillas simples dentro de)
perl -e "print ''Hello''"
Simplemente escriba en la línea de comando (no en un archivo)
perl -e ''print "Hello World/n";''
Esto solo es realmente bueno para oneliners. Los scripts más largos necesitan su propio archivo ...
Tratar:
#!/usr/bin/perl
# This is a comment ~~~
# This script will be run as a Perl script
# since ''perl'' isn''t a keyword or function in Perl
# something like this must fail:
#
# perl -e ''print "Hello";''
#
# The following should work.
print "Hello"; print " World/n";
O, si desea que su script de shell ejecute el código Perl:
#!/bin/sh
# That''s a Bash script ~~~
# It''s just a command line in a file ...
perl -e ''print "Hello World";''
Fondo: #!
Es una directiva de intérprete .
Cuando se ejecuta el comando, se convierte en una ejecución del intérprete.
Usted podría estar tratando de hacer esto:
system("/usr/bin/perl -e ''print /"Hello!////n/";''");
Ya que dijiste que estás buscando lo contrario, esto puede ser lo que quieres decir:
# vi stdin.pl
# cat stdin.pl
#!/usr/bin/perl
while(<STDIN>)
{
if( /^hello/ ){ print "Hello back to ya!/n"; }
}
# chmod 0777 stdin.pl
# ./stdin.pl
foo
hello
Hello back to ya!
#
perl
no es un comando válido dentro de una secuencia de comandos Perl. Si hubiera nombrado ese archivo como un script .sh, y hubiera usado #!/bin/bash
en la línea shebang, habría funcionado, pero no tiene mucho sentido escribir un archivo bash solo para invocar a Perl (¿Por qué no invocar Perl directamente?)
Como mencionó que desea interactuar con la línea de comandos, mencionaré aquí que puede obtener las opciones de línea de comandos dentro de Perl a través de la matriz @ARGV
. (Ver perldoc perlvar .)