별칭이나 함수가 포함된 Bash 사용자 정의 플래그

별칭이나 함수가 포함된 Bash 사용자 정의 플래그

내가 원하는 것은 bash 명령/별칭에 대한 사용자 정의 플래그를 정의할 수 있는 것입니다. 예를 들어 다음과 같습니다.

alias ll='ls -Alh'
alias la='ls -A'
alias l='ls -lh'

ls -d */그러나 위 명령을 실행할 때마다 실행되는 -d와 같은 사용자 정의 플래그를 설정하여 ll -f자세한 목록에 숨겨진 디렉터리만 나열하려고 합니다.

답변1

마지막 문장에서 무엇을 원하시는지 잘 모르겠습니다. 죄송합니다;)

나는 당신이 ll다음과 같은 기능을 원한다고 가정합니다.ls -Alh 와는 별개로호출될 때 ll -f- 이 경우 숨겨진 디렉토리만 나열되어야 합니다. 이것이 원하는 것이 아니라면 상대적으로 조정하기가 쉽습니다. 특별한 의미를 갖는 모든 플래그를 명령에 추가 getopts하고 각 플래그에 대한 사례를 작성하면 됩니다. 기본값은 항상 break함수에 특별한 의미가 없는 플래그를 전달하면 ls -Alh실행되도록 해야 합니다.

어쨌든, 여기에 호출된 함수를 정의할 수 있는 스크립트가 있습니다 ll(별칭은 원하는 작업을 수행할 만큼 강력하지 않습니다). 당신은해야합니다원천, 즉 source <script>스크립트이므로 함수가 정의됩니다. unalias ll스크립트를 받기 전에 주의하세요. 그렇지 않으면 예상치 못한 일이 발생할 수 있습니다.

#!/usr/bin/env bash
ll() {
    while getopts ":f" opt; do
        case $opt in
            f)
                command ls -Ald .*/
                return 0
                ;;
            \?)
                break;
        esac
    done
    command ls -Alh "$@"
}

ll -f이렇게 하면 동작이 ls -Ald .*/다음과 같이 모든 숨겨진 디렉터리를 나열하게 됩니다 . ll사인을 주면아니요 -f이는 기본적으로 호출됩니다 ls -Alh "$@"( $@간단히 "모든 인수"를 나타냄). 예를 들어 ll -d Desktop이라고 쓰면 ls -Alhd Desktop실행됩니다. 플래그가 전달되지 않은 경우 ll에만 실행됩니다 ls -Alh "$@".

관련 정보