itsource

bash의 별칭에 인수 전달

mycopycode 2023. 5. 7. 11:24
반응형

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

별칭에 매개 변수를 사용하려면 다음 방법을 사용합니다.

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

그것은 가명으로 싸여 있는 자기 파괴적인 함수이기 때문에, 그것은 거의 두 세계의 최고이며, 당신의 정의에서 추가적인 선을 차지하지 않습니다.내가 싫어하는 것은, 오 그래 그리고 만약 당신이 그 반환값이 필요하다면, 당신은 unset을 호출하기 전에 그것을 저장해야 할 것이고, 그 다음에 그 자체 파괴 함수에서 "반환" 키워드를 사용하여 그 값을 반환해야 할 것입니다.

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 man 페이지에서 함수가 제공할 수 있는 이점은 완료, 트랩, 바인딩 등 참조).

그게 도움이 되길 바랍니다 :)

일반적으로 Bash의 별칭에 인수를 전달하려면 별칭과 다음과 같은 함수를 조합하여 사용합니다.

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

alias t2d='__t2d'                                                               

다음은 기능 사용을 피할 수 있는 솔루션입니다.

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 에서 예를 들어 봅니다.)

lee25d의 답변을 단순화하려면 별칭과 함수의 조합을 사용합니다.예:

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

alias GetIt='__GetIt'

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

반응형