Pergunta

Esta questão é baseada em esta discussão .

O código

function man()
{       
    man "$1" > /tmp/manual; less /tmp/manual 
}

Problema: se eu usar até mesmo uma opção, o comando não sabe onde está o queria-manual

Por exemplo,

man -k find

me dá um erro, uma vez que a referência é errado. O comando lê -k como o manual.

Minha tentativa de resolver o problema em pseudo-código

if no parameters
    run the initial code
if one parameter
    run: man "$2"
...

Em outras palavras, precisamos adicionar uma opção de verificação para o começo de tal forma que

Pseudo-código

    man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual

onde $ n

  • n = 1 Se zero opções
  • n = 2 se 1 opção
  • n = 3 se 2 opções
  • ....

Como você pode fazer tal uma "opção de verificação", que você pode alterar o valor de US $ n?

Desenvolvido Problema: para fazer dois se laços para as situações de n = 1 para n = 2

Foi útil?

Solução

Que tal passar todos os argumentos

function man()
{       
    man $@ > /tmp/manual; less /tmp/manual 
}

O que é o bug em menos que você menciona no título?

Outras dicas

Em primeiro lugar, você pode passar todos os argumentos de sua função para man usando $* ou $@. Você pode ler man sh para os detalhes precisos sobre a diferença entre os dois; história curta é usar quase sempre "$@" com aspas duplas.

Em segundo lugar, o arquivo temporário é desnecessária. Você poderia fazer isso um pouco mais limpo canalizando a saída de man diretamente para less:

function man() {
    man "$@" | less
}

A propósito, se você está apenas tentando usar um pager diferente (usos man more e você quer o less apreciador) há uma variável de ambiente PAGER comumente reconhecido que você pode definir para substituir o paginador padrão. Você pode adicionar este a sua ~/.bashrc por exemplo, para dizer a todos os programas para usar less ao exibir várias telas de saída:

export PAGER=less

Para responder à sua pergunta precisa, você pode verificar o número de argumentos com $#:

if [ $# -eq 0 ]; then
    : # No arguments
elif [ $# -eq 1 ]; then
    : # One argument
# etc.

Você também pode encontrar o comando shift útil. Ele renomeia $2 para $1, $3 para $2, e assim por diante. Ele é frequentemente usado em um loop para argumentos processo de linha de comando, um por um:

while [ $# -gt 1 ]; do
    echo "Next argument is: $1"
    shift
done

echo "Last argument is: $1"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top