Я хочу знать, могу ли я передать аргумент с помощью команды псевдонима.
например:
alias d="dmesg|grep -iw usb|tail -5"
Теперь d
напечатает последние 5 строк. Если я хочу использовать d для печати другого числа строк, я должен снова внести изменения в объявление команды псевдонима d
.
Есть ли способ, которым я могу изменить объявление псевдонима, чтобы мне не пришлось повторно вводить объявление, чтобы изменить количество строк. Как включение передачи числа строк в качестве аргумента при объявлении псевдонима для d
? Или есть какой-то другой способ решить эту проблему?
command-line
bash
alias
srk_cb
источник
источник
Ответы:
Псевдонимы не принимают аргументов. С псевдонимом нравится
alias foo='bar $1'
, то$1
будет расширен за счет оболочки на первый аргумент оболочки (который не является , вероятно , ничего) , когда псевдоним запуска.Итак: используйте функции вместо.
num=${1:-5}
использует первый аргумент со значением по умолчанию 5, если он не предоставлен.Тогда вы можете сделать:
Или, если вы изменили параметры, которые вы использовали немного:
Тогда вы можете передать дополнительные
-n
параметры:Если
-n
указано несколько параметровtail
, используется только последний.источник
~/.bashrc
илиrc.local
или там , где?Вы должны иметь функцию для этого, как описано в SO и здесь . Попробуйте следующее:
и позвоните
foo
с:источник
Обход ограничений псевдонимов с помощью групповой команды и строки здесь
Псевдонимы не могут принимать аргументы, но мы можем «имитировать» это. Возьмите, например, пример моего ответа на этот вопрос .
Ключевые моменты, которые здесь происходят:
read
встроенный, чтобы прочитать строку в переменнуюd
. Поскольку мы хотим прочитать полную строку, включая пустые символы (символы новой строки, символы табуляции, пробелы), мы используемIFS=
и отключаем обратную обратную косую черту с помощью-r
.<<<
которая является оператор здесь строки позволяет перенаправлять любую строку мы предлагаем в качестве аргументаmkcd
псевдонима; использование будет какmkcd "some directory"
{ list; }
структуры (которая известна какgroup command
вbash
руководстве). Обратите внимание, что после пробела{
и;
отдельного списка команд не требуется.В вашем конкретном примере мы могли бы сделать:
Мы также можем использовать разбиение слов для хранения разделенных пробелами аргументов:
Или мы можем использовать массивы для предоставления нескольких аргументов:
Но разве это хороший подход?
Не обязательно. Проблема такого подхода в том, что он очень специфичен - аргументы нельзя легко заключать в кавычки, что означает, что у нас могут быть только аргументы без пробелов.
Это, конечно, не то, что будет широко использоваться, просто потому, что в реальном мире нам приходится иметь дело со сложными аргументами, поэтому такой подход не совсем практичен. Функции гораздо более гибкие. И необходимость заключать в кавычки строку args быстро раздражает.
Несмотря на ограничения, это работает с простыми строками в качестве аргументов, где мы можем позволить себе разделение слов, что частично позволяет нам давать аргументы псевдонимам.
источник