안녕하세요, 나 이거 갖고 있어요~/.bash_profile
export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"
program(){
$GOBIN/program $1
}
그래서 나는 그것을 할 수 있다 program "-p hello_world -tSu"
. 따옴표를 사용하지 않고 사용자 정의 플래그를 사용하여 프로그램을 실행할 수 있는 방법이 있습니까? 이렇게 하면 program -p hello_world -tSu
해당 플래그만 사용되며 -p
공백 뒤의 모든 항목은 무시됩니다.
답변1
program
쉘 함수 에서 "$@"
함수에 제공된 모든 명령줄 인수 목록을 참조하는 데 사용됩니다. 따옴표를 사용하면 주어진 각 명령줄 인수가 program
개별적으로 인용됩니다(일반적으로 원하는 대로).
program () {
"$GOBIN"/program "$@"
}
그러면 program
다음과 같이 호출할 수 있습니다.
program -p hello_world -tSu
hello world
아니면 대신 합격하고 싶다면 hello_world
,
program -p 'hello world' -tSu
아시다시피 using은 $1
첫 번째 명령줄 인수만 참조합니다(그리고 $2
두 번째 등도 참조합니다). 값은 $1
추가로 공백으로 분할되며 확장이 인용되지 않았기 때문에 각 결과 문자열은 파일 이름 글로빙을 거칩니다. 이로 인해 공백이나 파일 이름 글로빙 패턴이 포함된 인수가 함수에 잘못 전달됩니다.
답변2
"$@"
Kusalananda의 답변에 따라 함수/스크립트가 받은 모든 인수를 전달하는 방법을 제공하는 것입니다.
$GOBIN
그러나 go 프로그램 내에서 폴더를 사용하는 것 같으면 PATH에 폴더를 추가하는 것이 더 나을 것이라고 생각합니다.
export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"
export PATH="$PATH:$GOBIN"
이렇게 하면 $GOBIN
이름만 입력하면 그 안에 저장된 모든 프로그램을 실행할 수 있습니다(기존 프로그램과 이름이 같은 경우는 제외).추가$GOBIN을 $PATH로 지정하면 이 프로그램이 선택됩니다.마지막).
추신: 완전성을 기하기 위해 함수 대신 별칭을 사용하는 세 번째 옵션이 있습니다. 다음 위치에 넣을 수 있습니다 .bashrc
.
alias program="$GOBIN/program"
답변3
나에게 도움이 된 것은 다음과 같습니다.
m() {
args="$@"
usql mysql://root@localhost:3306 -c $args
}
이는 기본적으로 다음과 같은 명령을 실행할 수 있도록 명령 끝에 따옴표로 묶인 매개변수 세트를 넣습니다.
m show databases;
실제로 달렸어
usql mysql://root@localhost:3306 -c "show databases;"