Передача аргумента псевдонимам в bash

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

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

mongodb bin/mongod

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

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

Ответ 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

Ответ 2

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

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

alias t2d='__t2d'                                                               

Ответ 3

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

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).

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

Ответ 4

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

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

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

addone 200
input: 200
result:201

Ответ 5

В 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.)

Ответ 6

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

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

alias GetIt='__GetIt'