Передав аргумент псевдонимы в bash [дубликат]
этот вопрос уже есть ответ здесь:
можно ли сделать следующее:
Я хочу запустить следующее:
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чтобы отменить функция:
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).
Я надеюсь, что это поможет вам:)
это решение, которое может избежать использования функции:
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обозначение
\!^вызывает вставку аргумента в команду в этот момент.The
!символ ставить\чтобы он не интерпретировался как команда истории.вы также можете передать несколько аргументов:
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'
Comments