난 이런 곳에서 왔어" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?그리고https://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-scriptwhich
나 자신은 잘 알려진 모든 이유로 인해 이에 반대하는 것을 오랫동안 제안해 왔습니다. 그러나 그것은 힘든 싸움처럼 보입니다.
사람들이 이 명령을 포기하도록 만드는 것이 왜 그렇게 어려운가요 which
?
처음에 반대와 회의론에 직면했던 다른 많은 POSIX 혁신은 시간이 지남에 따라 일반적인 U*x 사양의 일부가 되었지만, 이는 현장에서 채택이 극도로 불안정한 혁신인 것으로 보입니다.
사람들이 왜 이 특정 POSIX 권장 사항을 기억하는 데 어려움을 겪는지 이해하고 싶습니다. POSIX의 입장이 아직 불안정한 것은 아닐까(우선type
, 지금command
)? 아니면 POSIX 이름이 command
기억하거나 내부화하기 어렵 기 때문인가요 ? (Bash가 POSIX 이전에도 존재했는지 궁금합니다. command
어쩌면 의미가 약간 다를 수도 있습니다.) 아니면 여전히 권장되는 모든 웹 사이트 및 포럼 게시물과 which
의심할 여지 없이 약간 더 눈에 띄는 이름에 불과합니까?
답변1
command -v
직접적인 교체가 아니기 때문입니다 which
.
https://github.com/koalaman/shellcheck/issues/1162
which
- 전체 경로를 출력하고,
- 쉘 내장 및 기능을 무시하고,
- 모두 존재하는 경우에만 true를 반환합니다.
- 별칭 대신 출력함
- 대시와 달리
type -p
- 대부분의 컴퓨터는 약 5가지 Bash/Linux 버전을 사용하므로 호환되지 않는 구현은 거의 없습니다.
답변2
@ user1133275의 답변 및 관련 의견 외에도 which
또는 type
사용 중인지 항상 알 수는 없습니다. 개인적으로 제 손가락은 그것을 사용하도록 훈련되어 which
있으며 명령 이름이 기억하기 쉽고 직관적이라고 생각합니다. 하지만 실제로는 다음을 사용하고 있습니다 type
.
$ which which
$ which type
$ type type
type is a shell builtin
$ type which
which is a function
which ()
{
type -path ${1+"$@"}
}
내일 누군가 더 나은 명령이 나오면 나는 그것을 변경 .profile
하고 내 사용자 정의 명령을 계속 사용할 것입니다 which
.
한마디로 이름이 기능과 밀접하게 연관되어 있기 때문에 근절이 어려울 것이라고 생각합니다.