Можно ли сделать следующее:
Я хочу запустить следующее:
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 "$@" fixed args; }
$ foo abc 123
будет выполнено, как если бы вы сделали
$ /path/to/bar abc 123 fixed args
Чтобы отменить определение псевдонима:
unalias foo
Чтобы отменить определение функции:
unset -f foo
Чтобы увидеть тип и определение (для каждого определенного псевдонима, ключевого слова, функции, встроенного или исполняемого файла):
type -a foo
Или введите только (для вхождения с наивысшим приоритетом):
type -t foo
unset -f foo
- person Dennis Williamson; 13.07.2016
PATH
: PATH=$PATH:/path/to/bar
, тогда вы сможете запустить исполняемый файл с именем 123
(и аргументы) без указания каталога. Или просто указывайте полный каталог (и аргументы) /path/to/bar/abc/123 fixed args
каждый раз. См. BashFAQ/50, чтобы узнать, почему вы не должны делать то, что, по вашему мнению, хотите. .
- person Dennis Williamson; 20.07.2017
.bash_profile
или .zshrc
, ничего больше не делая. Например: добавьте строку foo() { echo $1 }
в свой файл профиля, а затем вы можете вызвать foo
прямо в своей оболочке.
- person acrazing; 17.12.2018
Обычно, когда я хочу передать аргументы псевдониму в Bash, я использую комбинацию псевдонима и такой функции, например:
function __t2d {
if [ "$1x" != 'x' ]; then
date -d "@$1"
fi
}
alias t2d='__t2d'
if
утверждение?
- person Dennis Williamson; 31.10.2010
[ -n "$1" ]
(использование x таким образом является архаичным и ненужным для любой современной оболочки)
- person Dennis Williamson; 31.10.2010
__t2d
как функцию, то зачем вам вообще нужен псевдоним? Почему бы не назвать функцию t2d
и не использовать псевдоним?
- person Mark E. Haase; 12.03.2015
чтобы использовать параметры в псевдонимах, я использую этот метод:
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'
so..
вы могли бы, если вам нужно иметь эту переменную там
alias mongodb='function __mongodb() { ./path/to/mongodb/$1; 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
return
потерпел неудачу, если скрипт не был получен. Обертывание псевдонима в функцию означало, что return
всегда выполняется успешно. Спасибо за решение. Я дам вам чаевые в BCH, если вы предоставите кошелек.
- person Lubo Kanev; 11.04.2018
В 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'