"su" 명령의 별칭

"su" 명령의 별칭

bash 쉘, 데비안 확장

본 것처럼여기, 그래요명령(실제로는 아무런 문제도 발견하지 못했습니다...). 내 안에 넣었어/etc/bash.bashrc문서.

function su() { if [[ $1 == "--" ]]; then command su "$@"; else command su -l "$@"; fi; }

그러나 몇 가지 개선이 필요할 수 있다는 것을 알고 있습니다.

(이 함수를 통해 달성하려는 작업은 매우 간단합니다. 일반 별칭을 사용할 수 있다면 다음과 같습니다.

alias su='su -l그리고alias 'su --'=su

그러나 별칭 이름에는 공백이 포함될 수 없으며 논리가 약간 순환적인 것 같다는 것을 깨달았습니다...)

내 쉘 기능에 숨겨진 함정이 있나요? 다른 옵션(예: "su -c")을 사용하여 호출하면 "su" 작업이 부정적인 영향을 받나요?

답변1

실행해야 하는 첫 번째 인수 su로 호출하는 경우 , 그렇지 않으면 다음을 호출해야 합니다 .--su "$@"su -l "$@"

su () {
    if [ "$1" = -- ]; then
        command su "$@"
    else
        command su -l "$@"
    fi
}

이것이 바로 귀하의 기능이 현재 수행하고 있는 작업인 것 같으며, 제 생각에는 여기에 아무런 문제가 없다고 생각합니다. 유일한 차이점은 이식 가능한 POSIX 구문을 사용하여 작성했다는 것입니다. 유일한 잠재적인 문제는 su사용 하려는 경우입니다.다른예를 들어 ( 환경을 지우고 현재 작업 디렉토리를 변경하므로 정확히 원하는 것이 아닐 수도 있음) su -c ...로 변환됩니다 . 이러한 상황 su -l -c ...에 사용됩니다 .command su

위 함수의 원래 기능을 유지하면서 여기서 가능한 유일한 수정은 호출 수를 줄이는 것입니다 su. 호출하기 전에 매개변수 목록을 수정하면 됩니다. -l첫 번째 매개변수가 첫 번째 매개변수가 아닌 경우 --매개변수 목록 앞에 다음이 추가됩니다.

su () {
    [ "$1" != -- ] && set -- -l "$@"
    command su "$@"
}

별칭은 일반 텍스트 대체이므로 셸 함수처럼 검사하거나 변경할 수 있는 매개변수가 없기 때문에 별칭과 유사한 작업을 수행할 수 없습니다.

관련 정보