Чтобы исправить ошибку в команде Less, отметьте "нет".из параметров

StackOverflow https://stackoverflow.com/questions/1079853

  •  22-08-2019
  •  | 
  •  

Вопрос

Этот вопрос основан на этот поток.

Код

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

Проблема: если я использую хотя бы один вариант, команда не знает, где находится разыскиваемое руководство

Например,

man -k find

выдает мне ошибку, так как ссылка неправильная.Команда гласит -k как руководство пользователя.

Моя попытка решить проблему с помощью псевдокода

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

Другими словами, нам нужно добавить опцию-check в начало таким образом, чтобы

Псевдокод

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

где $ n

  • n=1, если вариантов ноль
  • n=2, если 1 вариант
  • n=3, если 2 варианта
  • ....

Как вы можете сделать такую "проверку параметров", чтобы вы могли изменить значение $ n?

Развитая Проблема: создать два цикла if для ситуаций от n = 1 до n = 2

Это было полезно?

Решение

Как насчет передачи всех аргументов

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

В чем ошибка в less, о которой вы упоминаете в названии?

Другие советы

Во-первых, вы можете передать все аргументы вашей функции в man используя $* или $@.Вы можете читать man sh для получения точной информации о разнице между этими двумя;короткая история заключается в том, чтобы почти всегда использовать "$@" в двойных кавычках.

Во-вторых, временный файл не нужен.Вы могли бы сделать это немного чище, передав выходные данные man непосредственно к less:

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

Кстати, если вы просто пытаетесь использовать другой пейджер (man использование more и ты хочешь более причудливую less) существует общепризнанный PAGER переменная среды, которую вы можете настроить для переопределения пейджера по умолчанию.Вы могли бы добавить это в свой ~/.bashrc например, чтобы указать всем программам использовать less при отображении нескольких экранов вывода:

export PAGER=less

Чтобы ответить на ваш точный вопрос, вы можете проверить количество аргументов с помощью $#:

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

Вы также можете найти shift команда полезная.Он переименовывает $2 Для $1, $3 Для $2, и так далее.Он часто используется в цикле для обработки аргументов командной строки один за другим:

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

echo "Last argument is: $1"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top