Bash에서 별칭 래핑

Bash에서 별칭 래핑

이전 .cshrc 파일을 .bash_aliases 파일로 변환합니다. 변환 중에 몇 가지 구문 문제가 발생했지만 이를 위해서는 더 깊은 Bash 지식이 필요합니다.

[t]Csh에서는 & 기호를 사용하여 백그라운드에서 열지 않는 한 xwindow 응용 프로그램을 열 때 셸이 정지됩니다(예: firefox &). 이를 방지하기 위해 Csh에서 특정 별칭을 만들어 백그라운드 작업에서 실행하지만 여전히). 명령줄 열기( 사용 \!*):

alias ff 'firefox \!* &

Bash로 변환되면 다음과 같은 작업을 수행합니다.

ff () { command ff "$@" & }

언제 기능을 사용해야 할지, 언제 사용해야 할지 아직 잘 모르겠습니다.별명, 그러나 정의된 별칭 주위에 더 많은 옵션을 래핑하려고 하면 중단됩니다.

win () { command xterm -geometry 105x25 -font 8x13 -bc "$@" & }
blue () { command win -bg gray33 -fg gray39 "$@" ; }

내가 삭제하면주문하다이내에파란색(예: blue () { win -bg ...) 예상대로 작동합니다.


그래서 저는 두 가지가 궁금합니다.

  1. 별칭과 함수 정의를 언제 사용해야 합니까?
  2. 언제 명령을 사용합니까? 사용하려면 alias win='xterm ...'어떻게 해야 합니까 command win?

답변1

먼저, 사소한 일에 이 함수를 사용하세요. 간단한 별칭은 기본적으로 일부 플래그를 설정하는 것입니다.

# no license spam
alias gdb='gdb -q'

더 복잡한 거의 모든 것에는 함수를 사용합니다.

2. command명령 등을 참조합니다 /bin/ls. 별칭은 명령이 아니며 기능은 명령이 아닙니다. 아마도 win명령이 없을 것이므로 command win명령이 아니기 때문에 함수를 호출할 수 없을 것입니다.

그런데 "무한" 루프는 만들기가 매우 쉽습니다.

alias fooalias=foofunc
function foofunc() { fooalias; }

이것이 누군가가 함수를 작성하는 이유입니다.명령과 동일한 이름그러면 command쉘이 함수를 영원히 호출하려고 시도하지 않도록 매우 편리해집니다.

# loops until stack death or segfault or something
function xterm() { xterm ... }

# good
function xterm() { command xterm ... }

다른 함수가 명령이나 함수일 수 있는 다른 함수를 호출하도록 하려면 그대로 호출하면 됩니다. 이 명령을 꼭 호출해야 한다면 반드시 사용해야 합니다 command.

function winwinwin () { winwin ... }
function winwin () { win ... }
function win () { xterm ... }
function xterm () { command xterm ... }

winwinwin함수가 winwin호출됩니다. win함수가 xterm호출됩니다 command.

앞서 이것은 선택 사항이지만 뒤에 공백이 있을 수 있는 항목을 찾는 대신 function함수( )를 검색하는 것이 상당히 쉽기 때문에 사용하고 오류는 괄호가 필요합니다. fgrep function ...엔진에서 Escaped를 사용하고 있는 정규식은 무엇입니까? 우선순위를 위해 알림을 쉽게 테스트하거나 인쇄하여 진행 상황을 확인할 수 있습니다.

ls () { ls -k; echo funcall; }
alias ls='echo blat'
ls

일반적으로, 놀라움을 피하기 위해 함수를 먼저 정의한 다음 별칭을 설정하는 것이 더 나은 생각일 것입니다.

bash-4.1$ alias ls='echo blat'
bash-4.1$ ls () { command ls -k; echo funcall; }
bash: syntax error near unexpected token `('
bash-4.1$ function ls () { command ls -k; echo funcall; }
bash-4.1$ 

관련 정보