Como apresentar um comando em várias linhas para uso de copiar / colar instantâneo?

3

Estou documentando alguns comandos para uso futuro, alguns deles são muito longos e quero documentá-los em várias linhas para visualização e, em seguida, basta copiá-los e colá-los para uso. Por exemplo:

Raw:

openssl pkcs12 -export -in intermediate/certs/lala-lira.cert.pem -inkey intermediate/private/lala-lira.key.pem -out intermediate/private/lala-lira.pfx

Apresentação:

openssl pkcs12 -export
-in intermediate/certs/lala-lira.cert.pem
-inkey intermediate/private/lala-lira.key.pem
-out intermediate/private/lala-lira.pfx

O problema é que se eu copiar e colar a forma de apresentação, cada linha será interpretada como um comando individual e independente.

    
por mikl 01.09.2017 / 19:31

2 respostas

7

Termine todas as linhas, mas a última com uma barra invertida. Para usar seu comando como exemplo:

openssl pkcs12 -export \
-in intermediate/certs/lala-lira.cert.pem \
-inkey intermediate/private/lala-lira.key.pem \
-out intermediate/private/lala-lira.pfx

O que você está fazendo aqui é escapar do fim-de-linha, fazendo com que o shell trate como espaço em branco não delimitador. Como o marcador de escape só tem efeito sobre o próximo caractere, o próximo caractere deve ser o fim-de-linha. (Isso significa que nenhum espaço à esquerda permitido; cuidado!)

    
por 01.09.2017 / 19:33
1

Você pode criar uma função (ou shell script) que contenha o texto e atribua as barras invertidas:

function wrapit { fmt -s -w 50 - | sed '$!s/$/ \/'; }

Isso usa a ferramenta fmt para agrupar o texto em 50 caracteres (ajuste como quiser). Ele também informa fmt para ( s ) somente a divisão, para que não se junte a nenhuma linha curta na entrada. Em seguida, ele usa sed para adicionar barras invertidas a todas as linhas, exceto a última:

  • $ é o endereço da última linha no arquivo
  • ! significa aplicar o comando subseqüente nas linhas que não correspondem ao endereço fornecido (aqui, tudo menos a última linha)
  • s/$/ \/ diz para substituir o "fim da linha" ( $ ) por um espaço e uma barra invertida, onde a barra invertida precisa ser escapada para finalmente aparecer como uma única barra invertida.

Insira o texto nessa função / script ou execute o script, insira o texto e finalize o texto com Control-D:

echo "openssl pkcs12 -export -in intermediate/certs/lala-lira.cert.pem -inkey intermediate/private/lala-lira.key.pem -out intermediate/private/lala-lira.pfx" | wrapit

ou

$ wrapit
openssl pkcs12 -export -in intermediate/certs/lala-lira.cert.pem -inkey intermediate/private/lala-lira.key.pem -out intermediate/private/lala-lira.pfx

Control-D

Este é um script simplista - não compreende opções de comando ou aspas; isso transformaria sua entrada de exemplo em:

openssl pkcs12 -export -in \
intermediate/certs/lala-lira.cert.pem -inkey \
intermediate/private/lala-lira.key.pem -out \
intermediate/private/lala-lira.pfx

mas eu queria apresentar uma resposta genérica caso você quisesse uma solução com script para várias entradas diferentes.

    
por 01.09.2017 / 20:08