Bash에서 얼마나 많은 다른 방법으로 "별칭"을 만들 수 있습니까?


10

난 단지 두 가지 방법을 알고 : alias foo=barfunction foo() { bar }.

내가 묻는 이유는-내 bash 세션 중 하나에서 갑자기-오류가 발생하여 ln명령을 실행할 수 없기 때문 bash입니다 -bash: /usr/local/.../ln: No such file or directory(여기서 /usr/local/.../PATH환경 변수 의 항목 중 하나입니다 ).

PATH그래도 문제 가 아닙니다. 실행 which ln하면 예상 바이너리가 출력되므로 /usr/bin/ln(절대 경로를 지정하면 정상적으로 실행될 수 있습니다).

또한 검사 ln내에서 aliasfunction선언, 그리고 아무것도 없다 :

$ declare -f | grep ln
$ alias | grep ln

하나의 bash 세션에서 문제가 발생했습니다. 새로운 쉘을 시작하면 다시 정상적으로 작동하지만이 특정 bash 세션 에서이 문제를 일으킨 원인을 알고 싶습니다.

이 문제를 일으킬 수있는 아이디어가 있습니까?

답변:


10

which명령을 사용할 때주의하십시오 . type ...명령 을 사용하는 것이 좋습니다 .

$ type ln
ln is /bin/ln

다음 whereis명령을 사용할 수도 있습니다 .

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz

네가 옳아! 나는 실행하면 type ln내가 할 ln is hashed (/usr/local/.../ln)문제로 나타나는,하지만은 그것은 "해시"의 정확한 의미는 무엇입니까? 나는 bash에서 그 기능에 대해 들어 본 적이 없다.
etherice

3
@etherice-Bash는 명령 이름과 위치에 대한 해시 (키 = 값 목록)를 유지합니다. hash -l명령으로 목록을 볼 수 있습니다 . 명령을 사용할 때 동적으로 작성됩니다.
slm

@etherice-난 당신의 질문을 upvoted 그래서 당신은 단지 4pts 8-)입니다. 문제가 해결되면 답변을 수락 할 수 있으며 이것이 가장 좋은 답변이라고 생각합니다.
slm

@etherice-다른 누군가가 방금 당신을 16 pt로 보냈습니다.
slm

1
감사! 나는 실행 hash -r명령에 경로 해시 테이블을 재설정하고, ln지금 작업 순서에 돌아왔다.
etherice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.