명령을 사용하면 언제든지 alias
값을 볼 수 있습니다 alias
.
wolf@linux:~$ alias al='grep "$1" file.txt'
wolf@linux:~$ alias al
alias al='grep "$1" file.txt'
wolf@linux:~$
불행히도 grep
별칭에서는 작동하지 않습니다. 무엇이 잘못되었는지 모르겠습니다. 문제점과 해결책을 아시는 분은 알려주세요.
wolf@linux:~$ al
random text
abc def jkl
random text
abc ghi jkl
random text
wolf@linux:~$
wolf@linux:~$ al abc
file.txt:random text
file.txt:abc def jkl
file.txt:random text
file.txt:abc ghi jkl
file.txt:random text
grep: abc: No such file or directory
wolf@linux:~$
그래서 함수를 사용하기로 결정했습니다.
wolf@linux:~$ func(){ grep "$1" file.txt; }
wolf@linux:~$ func
random text
abc def jkl
random text
abc ghi jkl
random text
wolf@linux:~$
효과가있다.
wolf@linux:~$ func abc
abc def jkl
abc ghi jkl
wolf@linux:~$
그런데 또 다른 문제가 생겼습니다. 여러 함수를 정의했지만 그 내용을 잊어버렸습니다.
alias al
위의 명령과 유사한 함수의 내용을 볼 수 있는 방법이 있습니까 ?
답변1
type NAME
(또는 type -a NAME
동일한 이름으로 여러 명령이 정의된 경우) 다음을 수행합니다.
$ func(){ grep "$1" file.txt; }
$ type func
func is a function
func ()
{
grep --color=auto "$1" file.txt
}
답변2
함수가 실행되는 코드를 봅니다 set
.
$1
별칭 내에서 작동하지 않기 때문에 별칭이 작동하지 않습니다. 별칭은 단지 텍스트 대체일 뿐이며 기능이 아닙니다. 따라서 별칭이 있는 경우
alias foo='bar "$1" baz'
그런 다음 foo
명령줄에 입력하면 쉘은 마치 입력한 것처럼 작동 합니다 bar "$1" baz
.foo something
bar "$1" baz something
bar something baz
답변3
이것은 주제에서 벗어난 답변입니다. grep
별칭이 기능 없이 작동하도록 만듭니다 .
다음에서 차용하고 각색했습니다.이 스택오버플로우 게시물:
alias al='grep file.txt -f - <<<'
그 다음에:
$ cat file.txt
aaa
bbb
ccc
$ al a
aaa
-f -
grep에게 파일의 표현식을 사용하도록 지시 하지만 여기 파일은 이므로-
stdin에서 표현식을 읽습니다. 그런 다음 bash here-string을 사용하여 문자열 내용을 표준 입력으로 리디렉션합니다. 이를 통해grep
표현식을 명령 끝에 배치할 수 있으며, 이것이 바로 별칭이 작동하는 데 필요한 것입니다.