Можно ли сделать следующее:
Я хочу запустить следующее:
mongodb bin/mongod
В моем bash_profile у меня есть
alias = "./path/to/mongodb/$1"
Можно ли сделать следующее:
Я хочу запустить следующее:
mongodb bin/mongod
В моем bash_profile у меня есть
alias = "./path/to/mongodb/$1"
Псевдоним будет расширяться до строки, которую он представляет. Все, что после псевдонима появится после его расширения, без необходимости быть или может быть передано как явные аргументы (например, $1
).
$ alias foo='/path/to/bar'
$ foo some args
будет расширен до
$ /path/to/bar some args
Если вы хотите использовать явные аргументы, вам нужно будет использовать функцию
$ foo () { /path/to/bar "[email protected]" 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 [ "$1x" != 'x' ]; then
date -d "@$1"
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/$1; 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 (в отличие от bash) вы можете делать именно то, что хотите.
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'