Ответ 1
Вы нашли способ: создать функцию вместо псевдонима. В оболочке C есть механизм для выполнения аргументов для псевдонимов, но bash и оболочка Korn не работают, потому что функциональный механизм более гибкий и обладает той же возможностью.
Как передать аргументы командной строки псевдониму? Вот пример:
alias mkcd='mkdir $1; cd $1;'
Но в этом случае $xx переводится во время создания псевдонима, а не во время выполнения. Тем не менее, я создал обходной путь, используя функцию оболочки (после небольшого поискового запроса), как показано ниже:
function mkcd(){ mkdir $1 cd $1 }
Просто хотел знать, есть ли способ сделать псевдонимы, которые принимают параметры CL.
BTW - я использую 'bash' в качестве моей оболочки по умолчанию.
Вы нашли способ: создать функцию вместо псевдонима. В оболочке 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 man:
В заменяющем тексте нет механизма для использования аргументов. Если необходимы аргументы, необходимо использовать функцию оболочки (см. ФУНКЦИИ ниже).
Итак, похоже, что вы ответили на свой вопрос - используйте функцию вместо псевдонима
Вы также можете найти эту команду полезной:
mkdir dirname && cd $_
где dirname - это имя каталога, который вы хотите создать
На самом деле вы не можете делать то, что хотите, с псевдонимами Bash, поскольку псевдонимы являются статическими. Вместо этого используйте созданную вами функцию.
Посмотрите дополнительную информацию: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/. (Да, я знаю это mactips.org, но это о Bash, поэтому не беспокойтесь.)
Я обнаружил, что функции не могут быть записаны в файле ~/.cshrc. Здесь в псевдониме, который принимает аргументы
например, аргументы, переданные команде "find"
alias fl "find . -name '\!:1'"
Ex: >fl abc
где abc - аргумент, переданный как!: 1
Это работает в ksh:
$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa
$ pwd
/tmp
$ mkcd
$ pwd
/tmp/aaa
Параметр "-x" делает псевдоним "exported" - псевдоним отображается в подоболочках.
И помните, что псевдонимы, определенные в script, не отображаются в этом script (потому что псевдонимы расширяются при загрузке script, а не при интерпретации строки). Это можно решить, выполнив другой файл script в той же оболочке (используя точку).
Самый простой способ - использовать функцию not alias. вы все равно можете вызвать функцию в любое время из кли. В bash вы можете просто добавить имя функции() {command}, чтобы она загружалась так же, как и псевдоним.
function mkcd() { mkdir $1; cd $1 ;}
Не уверен относительно других оболочек
Я думаю, что вы можете сделать это с помощью функций оболочки, если используете 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=