프로그래밍/GO

리눅스 which Go로 만들어보자 Golang Example

autostar 2023. 2. 23.
반응형

What is which?

which 가 무엇인가요?

  • 리눅스 시스템에서 아주 유용하게 쓰이는 명령어 입니다.
  • 터미널에서 which go 이런식으로 입력하면 그 실행파일의 path를 찾아주는 역할을 합니다.
  • 상황 설명
    1. 내가 맨날 실행하던 fish 쉘 어디서 동작하는지 모를때 which fish 입력하면 /usr/bin/fish 이런식으로 찾아줍니다.
      1. 분명 패키지를 지웠는데 잘 실행되고 있는경우 확인하려고 할때
      2. 내가 go를 홈 디렉토리에서도 설치하고 패키지 매니저로도 설치하고 깃허브에서도 설치하고 한 상황에서 go get 한 파일들을 찾아보려고 할 때 (go env에서 go path를 찾아보아도 된다.)

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 입력한다.

 

심심한데 빌드시켜서 응용프로그램으로 써도 될거 같네요^^

 

파일명이 없는것은 아무 출력이 안나옵니다

반응형

댓글