Insere uma nova linha em uma instrução perl -e?

1

Considere o seguinte one-liner Perl:

perl -e '$x; $y;'

Estou executando este comando em bash e gostaria de inserir uma nova linha ( \n ) entre ; e $y . Gostaria de saber como fazer isso de duas maneiras semelhantes, mas ligeiramente diferentes:

  1. Como posso inserir a nova linha nessa posição pressionando uma sequência de meta-chave para inserir a nova linha?

  2. Como posso inserir a nova linha nessa posição digitando alguma sequência de caracteres que não seja meta? (por exemplo, '$x;\n$y;' )

Em ambas as situações, quero que o interpretador Perl veja uma nova linha real, assim:

$x;
$y;
    
por portoalet 24.03.2010 / 09:50

5 respostas

2

Apague o espaço, depois digite Ctrl V , Ctrl J .
Então Retorna .

O Ctrl-V impede que o shell interprete o próximo caractere (nova linha) literalmente.

    
por 24.03.2010 / 14:10
3

A pergunta que você fez apenas diz respeito ao modo como o shell interpreta sua entrada e a transmite a outros programas. Não tem nada a ver com o Perl, por si.

Esta resposta endereça digitação de novas entradas para o shell. Use a resposta dos outros de ^V^J para inserir uma nova linha em uma linha de comando existente enquanto estiver usando a edição de linha de comando.

Você deve conseguir colocar isso em um script:

foo '$x;
$y;'

O argumento dado ao comando terá uma nova linha no mesmo local que no próprio script. Talvez seja necessário tomar cuidado para salvar um script desse tipo que use quebras de linha no estilo Unix (apenas LF), caso contrário, você pode obter um CR + LF (quebras de linha do DOS / Windows) ou apenas CR (antigo Mac). estilo lineb reaks).

Você também pode fazer isso em um prompt interativo, mas verá um prompt de continuação antes da segunda e de todas as linhas subsequentes:

$ foo '$x;
> $y;'

Em bash , você também pode usar o $'' citando a sintaxe para codificar um caractere de nova linha como este:

foo $'$x;\n$y;'

O argumento transmitido ao programa será tratado de maneira semelhante a uma cadeia ANSI C. Se você quiser uma barra invertida real na string, você terá que escapar como \ .

Então, se você realmente quer as citações de texto literal que as aspas simples dão a você, você provavelmente deve ficar com uma nova linha embutida para que você não tenha que se preocupar com escape extra.

    
por 25.03.2010 / 13:29
2

Mova o cursor para a posição e pressione Ctrl - V Ctrl - J

    
por 24.03.2010 / 14:10
1

Se você quer ter a edição pico, vi ou emacs, você pode usar o comando fc que significa fix command .

Você pode usar fc e Bash abrirá seu último comando no editor definido, como vi, emacs, etc. Eu uso pico para isso. Você pode então usar a edição multilinha com muita facilidade.

Você pode usar feeds de linha e formato para editar o comando. Depois de sair do editor, o comando é salvo em um buffer Bash e executado imediatamente.

No Bash, tente isto:

$ FCEDIT=pico
$ perl -e ''
$ fc

O comando FCEDIT=pico apenas define o editor para pico. Defina qualquer editor desejado. Você pode exportar isso e tornar permanente, se desejar.

O comando perl -e '' é um wrapper vazio em torno do seu novo script perl de uma linha. Quando você digita fc , o último comando é aberto no editor definido.

Agora no Pico, vá até o '' e insira seu script Perl. Lembre-se de que o script não é o mesmo que se você estivesse salvando-o em um arquivo de texto e estivesse sujeito à mesma necessidade de estar ciente de como o shell vai interpretar a entrada entre aspas simples. Principalmente, você precisará escapar de uma única citação com \

No pico, insira qualquer código Perl que você quiser, (sujeito à interpretação Bash dele ...)

Eu fiz isso:

perl -e  '
print "hello\n";
print "here is a second line\n";
$i=1;
$y=2;
print "\$i=$i, \$y=$y\n\n";
'

Agora salve o arquivo no nome padrão. (No pico, Ctl+O é gravado) e saia pico (Ctl + x). Bash irá ecoar e executar seu comando.

fc está documentado na seção 9.2 do manual do gnu AQUI

    
por 06.05.2010 / 04:21
0

É quase possível. Na linha de comando bash , \ (barra invertida) pode ser usado como caractere de continuação de linha. Na verdade, é o caractere de escape ; ele diz bash para tratar o próximo caractere na linha como especial.

Você usaria isso entre os tokens da linha de comando para adicionar novas linhas na linha de comando. Você deve retornar imediatamente após o \ para que funcione:

#                      +-----Press return here!!
#                      V
user@host:$ cat foo | \
>           perl -e '$x; $y'

Se você excluir a aspa simples, ' (e, opcionalmente, mais caracteres) no final da linha repetida,

perl -e '$x;\ $y

, e pressione Enter , em seguida, mais caracteres podem ser digitados, terminando com as aspas simples, ' . Observe que $ y ainda está ativo.

    
por 24.03.2010 / 11:15