function isaix { echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> ~/.kshrc; }
function islinux { echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> ~/.bash_profile; }
OSTYPE="`uname`"; if echo "${OSTYPE}" | grep -iq aix; then isaix; fi; if echo "${OSTYPE}" | grep -iq linux; then islinux; fi
앞의 줄은 처음 20개의 파일과 디렉터리를 크기별로 나열하는 "d" 별칭을 만듭니다.
질문: 이 긴 줄을 어떻게 짧게 만들 수 있나요? (OS 유형 감지 또는 기타 부분)
답변1
OSTYPE="`uname`"
OSTYPE="${OSTYPE,,}"
case "$OSTYPE" in
*aix*)
target=~/.kshrc
;;
*linux*)
target=~/.bash_profile
;;
esac
if [ -n "$target" ]; then
echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> "$target"
fi
답변2
$(...)
출력 파일 이름을 전환하려면 쉘의 명령 확장을 사용하십시오 .
이 코드는 aix만 확인합니다. 기본 동작이 업데이트되었습니다 .bashrc
.
echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> $( case $(uname) in *[aA][iI][xX]*) echo ~/.kshrc;; *) echo ~/.bashrc;; esac )
또는 가독성을 위해 줄을 분할합니다.
rcfile=$( case $(uname) in *[aA][iI][xX]*) echo ~/.kshrc;; *) echo ~/.bashrc;; esac )
echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> $rcfile
답변3
보다 컴팩트한 버전(ksh 및 bash에서 유효)은 다음과 같습니다.
typeset -l ostype
ostype="$(uname)";
cmd="alias d='du -sm -- * 2>/dev/null |sort -nr |head -n 20'"
case "$ostype" in
*aix*) echo "$cmd" >> ~/.kshrc; ;;
*linux*) echo "$cmd" >> ~/.bash_profile; ;;
esac
답변4
더 짧은 답변이지만 좀 더 비밀스럽습니다(bash와 ksh 모두에서 작동).
typeset -l ostype; ostype="$(uname)"
cmd="alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'"
case $ostype in
*linux*) a=ba;;
*aix*) a=k;;
esac
a="${a:+~/".${a}shrc"}"
${a:+false} || echo "$cmd" >> "$a"