Как передать аргументы командной строки псевдониму оболочки? - PullRequest
254 голосов
/ 02 июня 2009

Как передать аргументы командной строки псевдониму? Вот образец:

alias mkcd='mkdir $1; cd $1;'

Но в этом случае $ xx переводится во время создания псевдонима, а не во время выполнения. Однако я создал обходной путь, используя функцию оболочки (после небольшого приближения), как показано ниже:

function mkcd(){
  mkdir $1
  cd $1
}

Просто хотел узнать, есть ли способ сделать псевдонимы, которые принимают параметры CL.
Кстати, я использую 'bash' в качестве оболочки по умолчанию.

Ответы [ 12 ]

247 голосов
/ 27 марта 2014

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

alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'

Запуск следующего:

blah one two

Дает вывод ниже:

First: one
Second: two
155 голосов
/ 02 июня 2009

Вы нашли способ: создать функцию вместо псевдонима. Оболочка C имеет механизм для аргументов псевдонимов, но bash и оболочка Korn этого не делают, потому что механизм функций более гибкий и предлагает те же возможности.

52 голосов
/ 02 июня 2009

Вы не можете в ksh, но вы можете в csh.

alias mkcd 'mkdir \!^; cd \!^1'

В ksh функция - это путь. Но если вы действительно хотите использовать псевдоним:

alias mkcd='_(){ mkdir $1; cd $1; }; _'
15 голосов
/ 02 июня 2009

Цитировать справочную страницу bash:

Нет механизма использования аргументов в тексте замены. Если необходимы аргументы, должна использоваться функция оболочки (см. ФУНКЦИИ ниже).

Похоже, что вы ответили на свой вопрос - используйте функцию вместо псевдонима

11 голосов
/ 14 марта 2014

Вы также можете найти эту команду полезной:

mkdir dirname && cd $_

где dirname - имя каталога, который вы хотите создать

3 голосов
/ 20 августа 2017

Самый простой способ - использовать функцию, а не псевдоним. Вы все равно можете вызвать функцию в любое время из кли. В bash вы можете просто добавить функцию name () {command}, которая загружается так же, как псевдоним.

function mkcd() { mkdir $1; cd $1 ;}

Не уверен насчет других оболочек

2 голосов
/ 18 июня 2013

Я обнаружил, что функции нельзя записать в файл ~ / .cshrc .. Здесь в псевдониме, который принимает аргументы

например, аргументы, переданные команде 'find'

alias fl "find . -name '\!:1'"     
Ex: >fl abc

где abc - аргумент, передаваемый как!: 1

2 голосов
/ 02 июня 2009

Вы на самом деле не можете делать то, что хотите с псевдонимами Bash, поскольку псевдонимы являются статическими. Вместо этого используйте созданную вами функцию.

Смотрите здесь для получения дополнительной информации: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/. (Да, я знаю, что это mactips.org, но речь идет о Bash, так что не волнуйтесь.)

1 голос
/ 22 июля 2009

Это работает в ksh:

$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa 
$ pwd
/tmp   
$ mkcd
$ pwd
/tmp/aaa

Опция "-x" делает псевдоним "экспортированным" - псевдоним виден в подоболочках.

И помните, что псевдонимы, определенные в скрипте, не видны в этом скрипте (потому что псевдонимы раскрываются при загрузке скрипта, а не при интерпретации строки). Эту проблему можно решить, выполнив другой файл сценария в той же оболочке (используя точку).

0 голосов
/ 02 ноября 2017

Пустой псевдоним выполнит свои аргументы:

alias DEBUG=
...