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

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

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

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

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

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

Ответы

Ответ 1

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

Ответ 2

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

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

Выполнение следующего:

blah one two

Дает следующий результат:

First: one
Second: two

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

mkdir dirname && cd $_

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Ответ 8

Это работает в 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 в той же оболочке (используя точку).

Ответ 9

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

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

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

Ответ 11

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

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

$ count 6
0
1
2
3
4
5
$

Ответ 12

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

alias DEBUG=