Programming

bash에서 별칭으로 인수 전달

procodes 2020. 7. 19. 17:13
반응형

bash에서 별칭으로 인수 전달


이 질문에는 이미 답변이 있습니다.

다음을 수행 할 수 있습니까?다음을 실행하고 싶습니다.

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

일반적으로 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/'

실제로 매개 변수가 필요없는 동일한 작업을 수행하지만 내가 말했듯이 어떤 이유로 든 원하거나 필요로하는 경우 (예 : $ 1 대신 $ 2가 필요함) 그런 래퍼를 사용해야합니다. 한 줄보다 큰 경우 함수가 커질수록 눈에 띄게되기 때문에 함수를 작성하는 것이 좋습니다. 함수가 제공하는 모든 특권을 얻었으므로 함수는 훌륭합니다 (bash 맨 페이지에서 함수가 제공 할 수있는 장점은 완료, 트랩, 바인딩 등 참조).나는 그것이 당신을 도울 수 있기를 바랍니다 :)


이것은 기능 사용을 피할 수있는 해결책입니다.

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

이 표기법

\!^

은이 시점에서 인수가 명령에 삽입되도록합니다.

The ! character is preceeded by a \ to prevent it being interpreted as a history command.

You can also pass multiple arguments:

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

(Examples taken from http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html .)


To simplify leed25d's answer, use a combination of an alias and a function. For example:

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

alias GetIt='__GetIt'

참고URL : https://stackoverflow.com/questions/4060880/passing-argument-to-alias-in-bash

반응형