Pergunta
Eu quero entender o uso de xargs man
em :
screen -t man /bin/sh -c 'xargs man || read'
Graças ao Rampion: não precisamos gato
Por que precisamos xargs
no comando?
Eu entendo a -part xargs
como segue
- cat nada a xargs
- xargs faz uma lista de homem -commands
Eu tive uma idéia que xargs faz uma lista de comandos. Por exemplo,
find . -type f -print0 | xargs -0 grep masi
é o mesmo que uma lista de comandos:
find fileA AND grep masi in it
find fileB AND grep masi in it
and so on for fileC, fileD, ...
Solução
Não, eu não cat
nada. cat I qualquer entrada que eu recebo depois de executar o comando. cat
é realmente estranho aqui, então vamos ignorá-lo.
xargs man
espera na entrada do usuário. Que é necessário. Já que no script que você pegou que a partir, não pode colar no argumento para o homem até depois que eu criar a janela. Assim, o comando que é executado nas necessidades de janela para esperar por mim para dar-lhe alguma coisa, antes que ele tenta executar homem.
Se nós apenas correu screen /bin/sh -d 'man || read'
, seria sempre queixar "Que página do manual que você quer?" já que nunca disse isso.
Outras dicas
xargs recolhe argumentos de stdin e executa o comando dado com estes argumentos.
para gato está esperando algo ser digitado, e depois xargs está funcionando homem com essa entrada.
xargs é útil se você tem um monte de arquivos para processo, muitas vezes eu usá-lo com saída do achado.
xargs vai encher tantos argumentos quanto possível para a linha de comando.
É ótimo para fazer algo como
find . -name '*.o' -print | xargs rm
O comando cat
não opera em nada; ele opera na entrada padrão, até que seja dito que a introdução está terminada. Como observa rampion, o comando cat
não é necessário aqui, mas ele está operando em sua entrada implícita (entrada padrão), e não sobre nada.
O comando xargs
lê a saída do cat
e grupos a informação em argumentos para o comando man
especificado como seu (apenas) argumento. Quando se atinge um limite (configurável na linha de comando), ele irá executar o comando man
.
Os find ... -print0 | xargs -0 ...
idiom lida com nomes de arquivos que contenham caracteres estranhas como espaços em branco, tabulações e novas linhas. O comando find
imprime cada nome de arquivo seguido por um NUL ASCII ('\0'
); este é um dos dois personagens que não podem aparecer em um nome de arquivo simples - o outro ser (que aparece em nomes de caminho, é claro, mas não em nomes de arquivos simples) '/'. Não é diretamente equivalente à sequência que fornecem; Grupos xargs
coleções de nomes de arquivos em um único lista de argumentos, até um limite de tamanho. Se os nomes são curtos o suficiente (eles geralmente são), então haverá menos execuções de grep
do que há nomes de arquivo.
Note, também, a grep
só imprime o nome do arquivo onde o material é encontrado, se tiver mais de um arquivo de pesquisa - ou se ele suporta uma opção para que ele sempre imprime os nomes de arquivo e a opção é usada: '-H
' é uma extensão GNU para grep
que faz isso. A maneira portátil para garantir que os nomes de arquivo aparecem sempre é a lista /dev/null
como o primeiro arquivo (so 'xargs grep something /dev/null
'); ele não leva muito tempo para procurar /dev/null
.