내 별칭을 만들고 싶습니다 ~/.bash_profile
.
- 두 가지 주장을 취하다
$1 $2
- 다음으로 전달하세요.
diff
- 출력을 파이프로 연결
less
Stack에서 제가 필요한 것을 수행하는 솔루션을 찾지 못했습니다. 하지만 알고 있는 솔루션이 있으면 알려주시기 바랍니다! my 에 다음 줄이 나타납니다 ~/.bash_profile
.
alias reload='. ~/.bash_profile'
alias aliases='emacs ~/.bash_profile; reload'
function dif () { diff "$1" "$2" | less; }
alias different='dif'
내가 시도할 때:
gsuehr$ reload
-bash: /Users/gregorysuehr/.bash_profile: line 93: syntax error: unexpected end of file
bash 기능을 사용하는 방법을 이해하지 못하는 것 같습니다. reload
aliases
함수 선언을 주석 처리하면 2개의 별칭이 예상대로 작동하는 것을 확인했습니다 . 누구든지 다음에 대한 지식을 공유할 수 있습니까?
- EOF 오류는 왜 발생하나요?
- 여기서 하려는 작업을 수행하기 위해 bash의 기능을 어떻게 사용할 수 있습니까?
답변1
매개변수 뒤에 항목을 추가하기 위해 별칭을 사용할 수 없으며 함수가 필요합니다. 명령에 대한 대체 이름을 제공 alias myalias=mycommand
하거나( ) 초기 매개변수를 제공하는 경우( alias myalias='foo --option1 --option2'
)에만 별칭을 사용하십시오.
Bash에서는 function myfunction { … }
또는 myfunction () { … }
또는 을 사용하여 function myfunction () { … }
함수를 정의 할 수 있습니다. 이 형식은 myfunction () …
모든 sh 쉘에 이식할 수 있다는 장점이 있습니다. 키워드가 있는 양식에는 function
별칭도 작동한다는 장점이 있습니다. 이 경우 별칭을 사용하여 표준 양식을 작동시킬 수 있습니다. 별칭을 제외하면 구문은 bash에서 동일합니다.myfunction
\myfunction () …
함수 이름이나 뒤따르는 내용은 ()
올바른 형식의 복합 명령이어야 합니다. 당신의 판단에 따라답변(귀하의 질문에 있는 코드는 오류 메시지를 생성하지 않습니다. 분명히 테스트한 버전을 릴리스하지 않았습니다.) 귀하의 실수는 복잡한 명령을 잘못 작성했다는 것입니다. 중괄호 {
및는 명령의 첫 번째 항목인 경우에만 시작 목록 및 끝 목록 구문으로 인식되므로 }
닫는 중괄호 앞에 개행 또는 세미콜론이 필요합니다.
diff
또한 두 개의 매개변수를 전달 하고 나머지는 무시하는 대신 모든 매개변수를 전달해야 합니다 . 그게 다야"$@"
입니다.
function dif () { diff "$1" "$2" | less; }
또한 대화형 bash 세션에 대한 사용자 정의를 .bashrc
대신 입력해야 합니다 .bash_profile
. .bash_profile
이는 새 bash 인스턴스(예: 터미널에서)를 열 때가 아닌 로그인 셸에서만 읽을 수 있습니다. Bash의 설계 결함으로 인해 .bashrc
로그인 셸이 대화형이더라도 읽을 수 없으므로 다음 줄을 다음 줄에 넣어야 합니다 .bash_profile
.
if [[ $- == *i* ]]; then . ~/.bashrc; fi
대화형 사용자 정의(예: 별칭, 기능(예 dif
: 키 바인딩, 프롬프트 등))를 ~/.bashrc
.
답변2
내 질문을 업데이트하는 대신 이것을 답변으로 게시하면 그렇게 해야 하는지 알려주세요!
이 경우 bash 함수 구문을 잘못 이해했기 때문에 .bash_profile을 다시 로드할 수 없습니다.
function dif () { diff $1 $2 | less }
그것은 다음과 같아야 합니다:
dif () { diff $1 $2 | less; }
편집: 뒤에 세미콜론을 추가했습니다 less
. 작동되는 것을 확인했습니다!
shellcheck.net에 대한 링크를 제공한 @John1024에게 감사드립니다. 훌륭한 리소스입니다!