Как передать аргументы командной строки псевдониму оболочки?

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

псевдоним mkcd='mkdir $1; CD $1;'

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

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

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

12 ответов

Решение

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

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

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

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

blah one two

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

First: one
Second: two

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

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

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

alias mkcd='_(){ mkdir $1; cd $1; }; _'

Чтобы процитировать страницу руководства bash:

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

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

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

mkdir dirname && cd $_

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я думаю, что вы можете сделать это с помощью функций оболочки, если вы используете bash: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

Вот простой пример функции с использованием Python. Вы можете вставить в ~/.bashrc
Вы должны иметь пробел после первой левой фигурной скобки
Команда python должна быть в двойных кавычках, чтобы получить подстановку переменной
Не забывайте эту точку с запятой в конце

function count(){ python -c "для num в xrange($1):print num";}

$ count 6
0
1
2
3
4
5
$

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

alias DEBUG=
Другие вопросы по тегам