반응형
What is which?
which 가 무엇인가요?
- 리눅스 시스템에서 아주 유용하게 쓰이는 명령어 입니다.
- 터미널에서 which go 이런식으로 입력하면 그 실행파일의 path를 찾아주는 역할을 합니다.
- 상황 설명
- 내가 맨날 실행하던 fish 쉘 어디서 동작하는지 모를때 which fish 입력하면 /usr/bin/fish 이런식으로 찾아줍니다.
- 분명 패키지를 지웠는데 잘 실행되고 있는경우 확인하려고 할때
- 내가 go를 홈 디렉토리에서도 설치하고 패키지 매니저로도 설치하고 깃허브에서도 설치하고 한 상황에서 go get 한 파일들을 찾아보려고 할 때 (go env에서 go path를 찾아보아도 된다.)
- 내가 맨날 실행하던 fish 쉘 어디서 동작하는지 모를때 which fish 입력하면 /usr/bin/fish 이런식으로 찾아줍니다.
Go 에서 구현하기
Go에서 which 를 구현하면서 운영체제와 상호작용하는 방법을 살펴봅니다.
os 와 path/filepath 가 필요합니다.
os.Args에서 받은 인수를 arguments 에 저장합니다.
os.Args는 첫번째 인수를 현재 파일명으로 갖는데 len함수를 써서 인수가 입력되지 않으면 인수를 더 넣으라고 출력하는 부분입니다.
첫번째 커맨드라인 인수를 file 에 저장하고, PATH환경변수를 읽은다음 filepath.SplitList() 이용해서 경로들을 분리합니다.
막 요런거 있잖아요?
그리고 환경변수를 받아온것을 for 구문으로 돌면서 분리합니다.
fileInfo 는 파일이 존재하는지 확인하고
if mode.IsRegular 는 일반파일인지 확인
if mode&0111 은 실행파일인지 확인합니다.
filepath.Join() 을 이용해서 파일의 전체 경로를 만드는데 운영체제마다 다른 구분자를 사용해서 경로의 부분들을 합쳐주기 때문에 지원되는 모든 운영체제에서 잘 작동한다고 합니다.
실행 해보기
which 명령어 대신 go run . which 입력한다.
심심한데 빌드시켜서 응용프로그램으로 써도 될거 같네요^^
반응형
'프로그래밍 > GO' 카테고리의 다른 글
Golang 초보 예제 프로그램 전화번호부 애플리케이션 개발 시리즈 Phone book program #1 beginner friendly (0) | 2023.02.28 |
---|---|
GO Generic 제네릭 짧게 알아봄 (0) | 2023.02.24 |
Getting started with multi-module workspaces 멀티 모듈 워크스페이스 (0) | 2023.02.22 |
모듈 호출하기 Call your code from another module (0) | 2023.02.21 |
모듈 만들기 creating a module (0) | 2023.02.21 |
댓글