it-swarm-ko.tech

별칭에 매개 변수를 전달하는 방법은 무엇입니까?

Bash 스크립트의 경우 "[email protected]" 인수에 액세스합니다. 별칭을 사용할 때 동등한 기능은 무엇입니까?

77
prosseek

별명은 별명에 대한 모든 인수가 별명을 갖는 프로그램에 인수로 전달된다는 점에서 명령과 같습니다. 예를 들어, ls의 별칭을 ls -la로 지정하고 ls foo bar를 입력하면 실제 명령 줄에서 ls -la foo bar를 실행합니다. .

인수가 해석되는 방식을 실제로 제어하려면 다음과 같이 함수를 작성할 수 있습니다.

my_program_wrapper() {
    local first_arg="$1" \
          second_arg="$2"

    shift 2               # get rid of the first two arguments

    # ...

    /path/to/my_program "[email protected]"
}
54
amphetamachine

별칭 솔루션

실제로 함수 자체를 사용하지 않으면 다음을 사용할 수 있습니다.

$ alias wrap_args='f(){ echo before "[email protected]" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

첫 번째 인수 만 원하면 [email protected]$1로 바꿀 수 있습니다.

설명

인수로 전달되는 임시 함수 f가 작성됩니다.

별명 인수는 끝에 만 전달됩니다. f는 별칭의 맨 끝에서 호출됩니다.

unset -f는 별칭이 실행될 때 함수 정의를 제거하므로 이후에 멈추지 않습니다.

34
Tom Hale

현재 답변에 덧붙여서, 별명이 작동하는 방법에 대해 알아야 할 중요한 것은 별명 명령 후에 입력 한 모든 매개 변수가 문자 그대로 사용된다는 것입니다. 따라서 두 명령에 대해 별명을 사용할 수있는 방법이 없습니다 (파이핑 여부에 관계없이).이 중 첫 번째는 매개 변수를 해석해야합니다. 명확히하기 위해 예상대로 작동하지 않는 예가 있습니다.

alias lsswp="ls -l | grep swp"

(- this question 에서 영감을 얻은 예) current 디렉토리에서 수행되는 ls -l의 출력을 항상 사용하고 grep을 수행합니다. 사용

lsswp/tmp /

ls -l | grep swp /tmp/ not ls -l /tmp/ | grep swp와 같습니다.

중간에 인수를 사용해야하는 모든 목적을 위해 function 대신 alias를 사용해야합니다.

19
rozcietrzewiacz

실제로 아무것도 할 필요가 없습니다. 별명은이를 자동으로 수행합니다. 예를 들어 :

$ alias less="less -eirqM"
$ less foo.txt

Foo.txt의 첫 페이지가 표시되고 less는 EOF (-e)에서 종료되고 검색은 대소 문자를 구분하지 않습니다 (-i) 등).

15
Warren Young

나는 csh에 대답하고있다 :

예, 별칭으로 매개 변수를 사용할 수 있으며 위에서 언급 한 것과 달리 별칭 정의의 어디에서나 끝 부분을 참조 할 수 있습니다.

Tar-gz -ing의 예 :

$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"

, 어디 !:1!:2는 별칭을 호출 할 때 제공 할 매개 변수입니다.

사용 예 :

    $ ls
    clrcf.dat                             user_comment_2016.06.03_12:51:50.txt  user_comment_2016.06.03_12:54:48.txt
        TEST-wADM.tec                         user_comment_2016.06.03_12:52:04.txt  user_comment_2016.06.03_12:55:13.txt


    $ tgz user* out
    a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K

    $ ls out*
    out.tar.gz

Tar 명령의 임의의 위치에 삽입 한 두 개의 매개 변수를 사용하여 별명을 tgz

1
stevica