Как передать аргументы командной строки псевдониму оболочки?
Как передать аргументы командной строки псевдониму? Вот образец:
псевдоним 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
$