Comando para executar outro comando durante a repetição do comando no STDOUT

1

Não é fácil formular a pergunta corretamente, talvez ajude quando eu descrevo o que gostaria de fazer.

Eu quero executar um comando e canalizar sua saída em uma ferramenta chamada pastebinit , que envia a saída STDOUT para pastebin.

Isso funciona muito bem, no entanto, eu gostaria de enviar o comando em si, mas sem digitar uma segunda vez.

Existe algum comando que eu posso lançar "meu comando" com essa vontade

  1. Imprimir "meu comando" no STDOUT
  2. Executa "meu comando"

Tenho a sensação de que algo assim existe, mas, por mais difícil que seja formular uma pergunta desse tipo, não consegui descobrir o Google até agora.

    
por hakre 09.06.2011 / 20:08

4 respostas

3

Você pode escrever facilmente um pequeno script de wrapper para fazer isso:

#!/bin/bash

# Start a subshell
(

# Print the command to standard out
echo "Command: $@"
echo

# Run the command as well
$@

# End the subshell, and pipe all standard output from it to pastebinit
) | pastebinit

Salve este arquivo e chmod + x, então use o script que você criou para executar o comando e pastebinit.

Por exemplo:

./run_and_pastebin.sh ls -la /root
    
por 09.06.2011 / 20:14
2

Experimente o comando tee . Este comando lê a partir de uma entrada e depois grava em uma saída e arquivo padrão.

Exemplo: cat mytext.txt | tee pastebininit

Isso enviará o texto de mytext.txt para o padrão e para o comando pastebininit .

    
por 09.06.2011 / 20:12
0

Um comando para executar comandos do shell é sh (o shell), pode ser solicitado que ele faça o eco dos comandos para stderr com a opção -x . Você pode redirecionar o stderr para stdout.

$ sh -x -c "echo my command" 2>&1
+ echo my command
my command

O efeito colateral desta solução é que o comando ('echo my command' neste exemplo) stderr também é enviado para stdout. Isso pode ser ou não um problema para você. Além disso, o prefixo '+' é adicionado ao comando.

A opção '-x' também funcionará para scripts inteiros, ecoando cada um dos comandos do shell executados.

    
por 09.06.2011 / 20:46
0

Você pode dar uma olhada na minha resposta em outra pergunta semelhante:

link

Eu fiz lá um script que pode mostrar e executar quase "qualquer" comando (ou seja, o resto da linha é executado "como está", mesmo que inclua pipes, parâmetros complexos, citações, etc.  Não é correto para multilinha como está, mas pode ser feito com algumas adições, como uma string de terminação (para saber onde os comandos a serem executados terminam), e um pequeno script awk que copia linhas do lineno até a terminação. string e colocá-lo no arquivo tmp a ser originado. (veja o roteiro para detalhes)

    
por 04.12.2012 / 11:28