최상위 파일 및 디렉토리에서 사용되는 별칭 나열 - 가장 짧은 방법은 무엇입니까?

최상위 파일 및 디렉토리에서 사용되는 별칭 나열 - 가장 짧은 방법은 무엇입니까?
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"

관련 정보