Possível duplicata:
Qual é a maneira mais fácil de executar texto tail na linha de comando?
Eu estava supondo que a saída de um comando que não é executado deveria ser enviada para stdout e, portanto, pode ser canalizada. Parece que estou errado, então, por favor, corrija-me.
Por exemplo,
$easy_install
The program 'easy_install' is currently not installed. You can install it by typing:
sudo apt-get install python-setuptools
Então se eu quiser instalar com o comando sugerido, tentei
$easy_install | grep sudo | bash
ou seja, tentando ingenuamente escolher a última linha e enviá-la para o shell como um comando. eu até tentei
$easy_install | tail -1 | bash
mas obtenha a mesma sinopse sem fazer nada. O que estou fazendo de errado?
Responder1
A maneira mais fácil que consigo pensar, já que a linha em questão é um comando, é:
`$easy_install 2>&1 | grep sudo`
Os crases ou $(…)
pegue a saída de um canal de comando e execute-o como se você tivesse digitado, retornando a saída.
Observe que este comando não funcionará se você estiver faltando sudo
e tentando instalá-lo. Mas como este é obviamente o Ubuntu, sudo
geralmente está disponível. Para evitar isso, você pode tentar sua segunda opção:
`$easy_install 2>&1 | tail -n 1`
Tente se livrar do uso tail -1
, ele está sendo substituído pelo formulário padrão tail -n 1
. Eu também acho isso difícil, mas não gosto de avisos de depreciação. :)
Aviso: se$easy_install
existee você não obtém esse tipo de saída, qualquer um desses comandos é umenormerisco de segurança. Você pode acabar executando coisas arbitrárias. Você pode se proteger sendo mais extravagante:
`$easy_install 2>&1 >/dev/null | grep '^sudo apt-get install'`
Isso descarta stdout
e só executará qualquer coisa que comece com sudo apt-get install
o que limita bem as coisas, mas é consideravelmente mais irritante do que apenas digitar sudo apt-get install $package
você mesmo.
Responder2
A saída de erro normalmente vai para o erro padrão, não para a saída padrão; você pode pegar isso adicionando 2>&1
.
$ easy_install 2>&1 | grep sudo
Dito isto, eles estão usando uma função Shell para fazer isso e suspeito que uma pequena alteração nessa função permitiria que ela perguntasse a você e depois fizesse isso sozinho.