발생일: 2013.03.05 문제: 압축 파일을 다운로드 받아주는 간단한 쉘 스크립트를 작성하고 있다.아래와 같이 사용자 입력을 받아서, 다운로드 후 압축을 풀어주고 싶다. 압축을 해제할까요~? (y/n) 쉘 스크립트에서 프롬프트 입력은 어떻게 처리하면 될까? 해결책: read 커맨드를 사용하면 되고,위처럼 프롬프트 문자열 후에 한 글자만 받고 싶다면 아래와 같이 사용하면 된다. $ read -n 1 -p "Unzip all files? (y/N)" -n 옵션은 입력받을 캐릭터 수를 의미하고,-p 옵션은 프롬프트 전에 출력할 문자열을 의미한다. read 커맨드로 읽어온 문자열은 REPLY 변수에 저장된다.입력받은 문자열은 아래와 같은 방식으로 분기할 수 있다. $ [[ $REPLY == [yY] ]] &..
발생일: 2013.02.17 문제: 얼마 전 맥의 커맨드라인 svn을 업데이트 했다. 맥의 패키지 매니저 중의 하나인 Homebrew를 이용해서 인스톨했고,기존 버전은 1.6.18, 새로 받은 버전은 1.7.8이었다. 헌데, 업데이트 받은 후에도 svn이 기존 버전을 그대로 유지하고 있는 거다. $ svn --version svn, version 1.6.18 ... 혹시나 해서 type을 확인해보니, 기존 경로의 바이너리가 호출되고 있었다. $ type svn svn hashed (/usr/bin/svn) (type 커맨드로 파일의 타입을 확인할 수 있고, 실행 파일일 경우 경로를 알 수 있다) 새로 받은 svn은 /usr/local/bin 에 넣어뒀지만,PATH 변수에서 /usr/bin 이 /usr/l..
발생일: 2013.02.17 문제: PATH 정보를 조회해보니, git과 관련된 bin 디렉토리가 경로의 마지막에 포함되어 있다. $ echo $PATH ..(중략)..:/usr/local/git/bin 얼마 전 .bash_profile을 정리하면서,추가적으로 정의하는 PATH 경로는 아래처럼 PATH의 앞 부분에 추가하도록 했었다. $ export PATH=새패스:$PATH 어딘가에서 추가되었다면 앞 부분에 있는 게 당연한데,마지막에 정의되어 있는 것이 이상해 어디서 정의됐는지 파일을 뒤적여봤다.그리고, /etc/paths.d/git 파일에 정의되어 있는 걸 발견했다. /etc/paths.d 는 처음 들어 생소한 데다,/etc/paths 도 자세히 확인해본 적이 없어 잘 모르겠다. /etc/paths와..
발생일: 2013.01.29 문제: git을 자주 사용하곤 있지만 주로 개인 프로젝트에만 사용했던 터라,실제로 충돌이 발생해 diff를 자세히 보는 경우는 거의 없었다. 그러다 오늘 문득, 작업 중에 `git diff`를 호출해봤는데,출력된 내용 중에 아래 부분이 눈에 확 들어오더라. @@ -1,13 +1,7 @@ 순간, 이게 무슨 뜻이더라. 싶더라.1,13 라인을 빼고 1,7라인을 더했다는 건가... 그 전에도 분명히 이런 문구가 나오긴 했었겠지만,처음 보는 느낌이니 그리 눈에 띄진 않았던 모양이다. 저 문구를 이제서야(?) 알아보게 된 건,얼마 전 dotfiles을 변경하면서 터미널에 신택스 하이라이팅이 적용되었기 때문인데,글쎄, 저 부분이 정말 "핫핑크" 볼드로 하이라이팅 되어있더라. 여튼, 기초 ..
발생일: 2013.01.24 문제: 얼마 전 만든 커맨드라인 영어사전인 ndic 모듈에 새로운 기능을 붙여보려고 한다. 생각해둔 건 탭 자동완성 기능이다. 커맨드라인에서 단어를 검색하다보니,입력하던 도중에 철자를 틀리거나, 단어의 뒷 부분을 까먹어서 제대로 검색되지 않는 경우가 있더라. `ndic symp` 다른 커맨드라인 명령어에서처럼,ndic 명령 이후에 탭을 입력했을 때 비슷한 단어 목록을 제시해주면 꽤 쓸만할 것 같다. 기존 명령어의 탭 자동완성은 주로 폴더 내 파일 목록을 보여주는데,위와 같이 커스텀 명령에 적용하면서, 목록을 다이나믹하게 생성할 수도 있을까? 해결책: 요즘 많이 사용 하는 BASH Shell과 Z Shell의 방법이 다르긴 하지만, 둘 다 가능하다.여기서는 일단 BASH에 관해..
발생일: 2013.01.16 문제: 어젯밤부터 간단한 노드 모듈을 만들어보고 있다.얼마 전 배시(BASH)를 익혔던 터라, 자바스크립트 대신 배시 파일로 만들어보기로 했다. 배시 파일을 작성하다보니,에디터에서 수정하고 쉘로 넘어가 실행하는 횟수가 많아지더라. 1. 에디터에서 저장 2. Alt + Tab으로 쉘로 이동 3. 화살표 ↑ 로 최근 명령 실행 4. 다시 Alt + Tab으로 에디터로 이런 식으로 작업하고 있는데, 아무래도 이거 넘 귀찮다. 배시 파일을 모니터링 해서,파일이 변경되면 바로 쉘을 실행하도록 하면 테스트하기 굉장히 편할 것 같은데,좋은 방법이 없을까? 해결책:검색해보니, 이런 용도의 파일 모니터링 도구가 많더라. 가장 대표적인게 inotify tools 인 것 같다. https://g..
발생일: 2013.01.11 문제: *nix 기반의 설정 파일을 공유하자는 dotfiles.github.com 가이드를 보고 맥에 적용해봤다. http://dotfiles.github.com/ 난 Paul Irish의 것을 포크해서 쓰고 있는데, (https://github.com/ohgyun/dotfiles)내 입맛에 맞게 바꿔보려고 하니 설정 파일이 많아 좀 헷갈리더라. 이참에 쉘 스크립트를 공부해봐야겠다 싶어서 조금씩 보고 있는 중이다. dotfiles repository를 처음 보고 들었던 생각은 이런 것들이었다. "어디서부터 시작해야 되지..." ".bash_profile 파일은 봤는데, .function 이며, .aliases 라는 것들도 원래 있었던 건가..." 해결책: 환경 설정 파일에는 ..
발생일: 2013.01.07 문제: 최근 dotfiles 가이드를 알게 돼서 나도 설정 파일을 이렇게 관리해볼까 한다. 아마도, 설정 파일들은 특정 폴더(A)에 모두 모아두고,실제 설정 파일이 위치해야 하는 폴더에서는 (A) 폴더에 위치한 파일의 심볼릭 링크를 두면 될 것 같다. 해서, ln -s original_filename link_filename명령어로 심링크를 만들려다가 문득... 소프트링크와 하드링크의 명확한 차이점이 궁금해졌다. 이거 아주 아주 예전에 어디선가 배우고 실습도 했던 기억이 슬며시 있는데.. -_-a하드 링크를 만들어본 적은 없었다. 명확한 차이점이 뭘까? 해결책: 소프트 링크와 하드 링크의 차이점에 대해 아주 자세히 잘 설명해둔 문서가 있다!! The difference bet..
발생일: 2012.01.08 문제: 구글 클로저 컴파일러로 여러 개의 자바스크립트 파일을 압축하려고 한다. 컴파일러는 jar 형태로 되어 있고, --js 와 --js_output_file 옵션으로 입출력 파일을 구분할 수 있다. $ java -jar compier.jar --js one.js --js two.js --js three.js --js_output_file output.js 이런 식이다. 파일 개수가 많아져서 가독성 좋게 옵션을 라인 단위로 작성하고 싶다. 우째야 하나. 해결책: 기초 중의 기초란다. ㅎㅎ 라인으로 구분되어 있지만, 명령이 한 줄이라는 것을 알려주기 위해 백슬래쉬(\)를 사용하면 된다. $ java -jar compier.jar \ --js one.js \ --js two.js..