필자는 fish shell 의 직관적이고 빠른 속도에 매우 만족하며 사용중이다.
보통 한국에서 검색을 하면 bash shell 의 대체제로 zsh 및 oh-my-zsh 를 쓰라고 많이들 하는데 어쩌다 fish shell 과 oh-my-fish 를 알게 되고나선 fish shell 만 주구장창 쓴다.
근데 보통 fish shell 쓸 때는 2가지에서 막히는데
1. chsh 명령어가 안먹는 경우
보통 chsh(change shell 의 약어로 보임) 명령어가 잘 안먹을텐데, 이건
$ chsh -s /usr/local/bin/fish
이게 non standard shell 이라면서 튕기는 경우일 것이다.
맥에서 Mojave 이후 그럴 경우
$ vi /etc/shells
/etc/shells 를 열어보면 standard shell 이라고 잡아놓은 shell 들 목록이 있는데 거기다가 이번에 깐 fish shell 을 맨 밑에 추가해주면 chsh 명령어가 먹힐 것이다.
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish # 이 라인을 추가해주었다.
2. 이런저런 환경변수 세팅 하고 싶은데 보통 문서들이 zsh 의 zshrc 파일 고치는거나 bash-profile 고치는것만 알려주고 fish shell 에서는 어떻게 하는지 잘 안알려준다.
zsh, bash shell 세팅은 다음과 같다. - 보통 이렇게 문서를 준다.
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
이것만 보면 fish shell 에서는 세팅이 같은 명령어로는 불가능하기에 리액트 네이티브 환경 세팅 시 (안드로이드 sdk 및 cli 툴용 환경변수가 필요) 내 컴퓨터에 환경변수 세팅을 어떻게 했는지 적어둔다.
맥 환경에서 omf (oh my fish) 까지 세팅한 경우 환경세팅을 해줘야하는 파일은 ~/.config 파일에 존재한다.
# Path to Oh My Fish install.
set -q XDG_DATA_HOME
and set -gx OMF_PATH "$XDG_DATA_HOME/omf"
or set -gx OMF_PATH "$HOME/.local/share/omf"
# Load Oh My Fish configuration.
source $OMF_PATH/init.fish
set --export ANDROID $HOME/Library/Android;
set --export ANDROID_HOME $ANDROID/sdk;
set -gx PATH $ANDROID_HOME/tools $PATH;
set -gx PATH $ANDROID_HOME/tools/bin $PATH;
set -gx PATH $ANDROID_HOME/platform-tools $PATH;
set -gx PATH $ANDROID_HOME/emulator $PATH;
set --export JAVA_HOME /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home;
set -gx PATH $JAVA_HOME/bin $PATH;
위의 예시를 보면 밑에 set --export ANDROID $HOME/Library/Android; 요 명령어부터 보자. 이건 ANDROID 라는 환경변수 ($ANDROID) 가 $HOME/Library/Android 디렉토리를 가리킨다는 이야기이다.
뒤에 명령어 set --export ANDROID_HOME $ANDROID/sdk; 이것은 앞으로 ($ANDROID_HOME) 환경변수는 위에서 설정한 $ANDROID 에 뒤에 /sdk 를 붙인 디렉토리를 의미한다.
위의 fishshell 예시에서는
$ANDROID
$ANDROID_HOME
$JAVA_HOME
이 3가지 환경변수로 만들어주었다.
이렇게 --export 명령어를 이용해서 환경변수를 세팅해준다음에 $PATH 에 앞으로 자주 들락날락할 변수들을 이용해주기 위해 set -gx 명령어를 이용한 것이다.