나는 별칭을 사용하는 데 매우 익숙해졌습니다. 특히 모든 다른 git 명령과 명령의 순서 및 상호 종속성 등에 대해 매우 편안해졌습니다. 따라서 더 복잡한 스크립트를 실행하는 몇 가지 별칭을 만들었습니다.
alias stash='f() { .... }; f'
전반적으로 매우 간단합니다. 그러나 나는 가장 순수한 개발 스타일이기 때문에 "잘 구성된" 코드를 좋아합니다. 형태는 때로는 기능만큼 중요합니다. 따라서 간단한 별칭을 사용하십시오.
alias gca='git commit --amend '
.bash_aliases
문제 없이 파일 에 직접 나열할 수 있습니다 . 그러나 일부 다중 명령 별칭의 경우 별도로 분리되기를 원합니다.
타자를 치는 help
것 같군요
function name { COMMANDS ; } or name () { COMMANDS ; }
그러나 현재 내가 사용하는 것으로 이해되는 유일한 방법은 function
별칭 형식입니다. 그러나 내가 댓글을 달고 있는 게시물의 색상을 고려하여 git diff --name-status
스크립트를 SH 파일에 통합할 수 있으며 이 예에서는 xargs를 통해 데이터를 SH 파일에 전달합니다.
그러나 스크립트를 통해 "함수"를 생성하여 "별칭"으로 나열되지 않고 sh 파일에 저장된 실제 함수로 나열되는 것이 가능할까요?
상상의:
alias stash='f() { if [[ -z $1 ]]; then git stash list; else git stash $1; fi; }; f'
대신 stash.sh
파일에는 다음이 포함됩니다.
function stash
{
if [[ -z $1 ]]; then
stash list;
else git stash $1;
fi;
}
비슷한 것이 가능합니까? 두 경우 모두 프롬프트에 간단히 "stash"를 입력하지만 완전히 다른 방식으로 정의됩니까?
답변1
사용자 환경에 필요한 기능 목록을 얻을 수 있습니다.
파일을 생성 ~/.bash_functions
하고 에서 가져옵니다 ~./bashrc
. 소스와
같은 방식 :./bash_aliases
if [ -f ~/.bash_functions ]; then
. ~/.bash_functions
fi
그런 다음 원하는 만큼 많은 (복잡한) 함수를 정의하세요.
함수에 대한 별칭을 정의할 수 있습니다(순서를 유지하기 위해 ~/.bash_aliases에서). 하지만 소스 함수를 직접 호출할 수 있으므로 실제로는 필요하지 않습니다. 정의에 따르면:
stash() {
if [[ -z $1 ]]; then
stash list;
else
git stash $1;
fi;
}
또는 를 통해 간단히 stash
호출 할 수 있으며 stash this
별칭은 필요하지 않습니다.
답변2
함수 정의를 별칭에 채우는 이유가 무엇인지 혼란스럽습니다. 별칭 stash
은 함수 호출을 정의한 f
다음 이를 즉시 호출하여 별칭에 전달된 인수를 받습니다. 일상적으로 사용하는 경우 이는 다음과 같은 함수를 정의하는 것과 동일합니다 stash
.
function stash {
if (($# == 0)); then
git stash list;
else
git stash "$@";
fi;
}
별칭의 내용과 비교하면 다음과 같습니다.
function stash { … }
또는 를 사용하여stash () { … }
함수를 정의할 수 있습니다. 그것들은 동일합니다. 이미 명명된 별칭을 정의한 경우stash
함수를 정의하려고 하면 확장되므로 정의가 원하는 대로 작동하지 않는다는 것입니다. 함수를 정의할 때 함수 이름이 이미 별칭으로 정의되어 있지 않은지 확인하거나 구문을 사용하세요function
.- 저는
(($#==0))
첫 번째 매개변수가 비어 있는지 테스트하는 대신 함수에 매개변수가 있는지 테스트하기 위해 이것을 사용하고 있습니다. 의도는 더 명확하다. (이것은 null 매개변수를 허용하지만 여기서는 의미가 없습니다.) - 변수 확장에는 항상 큰따옴표를 사용하세요..
- git 을 호출할 때
"$@"
대신 사용합니다. 함수의 모든 매개변수를 전달합니다."$1"
"$@"
별칭 정의와 동일한 위치( 예 : .bashrc
, in .bash_aliases
또는 에서 제공하는 다른 파일) 에 함수 정의를 배치할 수 있습니다..bashrc
. ~/lib/git-functions.bash
답변3
{ cat >myfunction.fn
. ./myfunction.fn
fn 1 2 3 4 5
} <<""
fn(){
printf %s\\n "$@"
}
1
2
3
4
5
쉘 .
명령은원천현재 쉘 실행 환경의 명명된 파일입니다. 거기에 정의된 모든 함수, 변수, 별칭 또는 기타 유형의 셸 상태는 return
발생 시 지속됩니다.
너 하나 만들 수 있어자동 로드예를 들어 스텁 함수를 정의하여 함수 정의 순서를 지정합니다.
fn(){ . ./fn.file && fn "$@"; }
...소스 파일에는 다음의 재정의가 포함되어 있습니다 fn()
.
fn(){
: a whole new fn
}
: any other init state commands you might like to run