Передача аргумента алиасу в bash [duplicate]

этот вопрос уже есть ответ здесь:

можно ли сделать следующее:

Я хочу запустить следующее:

mongodb bin/mongod

в моем bash_profile у меня есть

alias = "./path/to/mongodb/"

6 ответов


псевдоним будет расширяться до строки, которую он представляет. Все, что после псевдонима появится после его расширения без необходимости или возможности передачи в качестве явных аргументов (например,).

$ alias foo='/path/to/bar'
$ foo some args

будет расширен до

$ /path/to/bar some args

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

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

будет выполняться, как если бы вы сделали

$ /path/to/bar abc 123 fixed args

чтобы определить псевдоним:

unalias foo

к undefine функция:

unset -f foo

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

type -a foo

или введите только (для случая наивысшего приоритета):

type -t foo

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

function __t2d {                                                                
         if [ "x" != 'x' ]; then                                              
            date -d "@"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               

чтобы использовать параметры в псевдонимах, я использую этот метод:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

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

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

так..

вы может, если вам нужно иметь эту переменную там

alias mongodb='function __mongodb() { ./path/to/mongodb/; unset -f __mongodb; }; __mongodb'

конечно...

alias mongodb='./path/to/mongodb/'

фактически сделал бы то же самое без необходимости параметров, но, как я уже сказал, Если бы вы хотели или нуждались в них по какой-то причине (например, вам нужно было $2 вместо $1), вам нужно было бы использовать такую обертку. Если он больше одной строки, вы можете подумать о том, чтобы просто написать функцию прямо, так как она станет больше бельмом на глазу по мере ее увеличения. Функции велики поскольку вы получаете все льготы, которые дают функции (см. завершение, ловушки, привязку и т. д. Для лакомств, которые могут предоставить функции, в bash manpage).

Я надеюсь, что это поможет вам:)


это решение, которое может избежать использования функции:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

результат теста

addone 200
input: 200
result:201

на csh (вместо Баш) вы можете делать именно то, что вы хотите.

alias print 'lpr \!^ -Pps5'
print memo.txt

обозначение \!^ заставляет аргумент быть вставленным в команду в этот момент.

на ! символ ставить \ чтобы предотвратить его интерпретацию как команды истории.

вы также можете передать несколько аргументов:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

(примеры взяты из http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html .)


чтобы упростить ответ leed25d, используйте комбинацию псевдонима и функции. Например:

function __GetIt {
    cp ./path/to/stuff/$* .
}

alias GetIt='__GetIt'