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
'itsource' 카테고리의 다른 글
특정 디렉토리에 직접 ssh할 수 있는 방법은 무엇입니까? (0) | 2023.05.07 |
---|---|
pyvenv-3.4가 0이 아닌 종료 상태 1을 반환했습니다. (0) | 2023.05.07 |
Windows에서 디렉터리/폴더의 트리 보기? (0) | 2023.05.07 |
목록의 모든 요소가 동일한 유형인지 확인 (0) | 2023.05.07 |
"git commit" 대신 수행된 "git commit --amend"를 실행 취소하는 방법 (0) | 2023.05.07 |