다음과 같이 두 개의 별칭을 추가하고 싶습니다. 하나는 sudo가 아닐 때 명령을 실행하고 다른 하나는 sudo일 때 명령을 실행합니다.
alias v = 'nvim'
alias 'sudo v' = 'sudo -E nvim '
나도 결심했어 alias sudo='sudo '
.
답변1
에서 무엇을 해야 하는지 설명하고 있습니다 bash
. zsh
거기에서 무엇을 해야할지 잘 모르겠습니다 .
나는 당신의 문제가 등호의 왼쪽에 있다고 생각합니다. 고유하고 짧으며 기억하기 쉬운 별칭 이름을 사용하십시오(공백 없음). 또한 등호 주위에는 공백이 없어야 합니다.
그렇지 않으면 별칭에 포함시키는 것이 쉽습니다 sudo
. 별칭 정의에 넣으면 됩니다. 내 별명을 사용하여 예를 보여줄 수 있습니다 ~/.bashrc
.
alias uc='sudo umount /dev/sdc*'
(드라이브의 모든 파티션을 마운트 해제합니다 /dev/sdc
.)
sv
별칭으로 이름을 제안할 수도 있지만 해당 이름을 가진 표준 도구가 있으므로 sev
'에스당신은 -두번째NV나, 더 잘할게.
답변2
당신이 가지고 있다면
alias sudo='sudo '
alias v='nvim'
그런 다음 별칭의 후행 공백으로 인해 쉘이 별칭 확장을 위해 다음 단어도 확인하게 되므로 실행이 sudo v whatever
작동합니다 .sudo nvim whatever
하지만 이름에 공백이 있는 단일 별칭을 가질 수는 없습니다. Bash는 이를 허용하지 않고 zsh는 허용하지만 실제로 사용할 수 있는 방법은 없다고 생각합니다.
zsh% alias 'a b'='echo test'
zsh% 'a b'
zsh: command not found: a b
$ alias 'a b'='echo test'
bash: alias: `a b': invalid alias name
-E
해당 옵션을 에 추가하는 경우 별칭(예: ) sudo
에 포함하지 않으려면 제가 생각할 수 있는 가장 가까운 옵션은 다음과 같습니다.sudo
alias sudo='sudo -E '
alias sudoe='sudo -E '
alias v='nvim'
# or
alias sudov='sudo -E nvim'
또는 설명에서 알 수 있듯이 sudoedit
/를 사용하여 sudo -e
파일을 편집합니다.
답변3
해당 특정 구문을 사용하려는 경우 실행에 대한 별칭은 어디에 있습니까 v
(그러나 실행을 원하지 않는 경우)nvim
sudo v
sudo -E nvim
-E
모두sudo 사용법) 함수를 사용하여 sudo를 재정의해야 할 가능성이 높습니다.
실제로, 다른 처리를 수행하는 함수를 정의하는 것은 그리 까다롭지 않습니다 v
. 무엇예까다로운 점은 현재 alias sudo='sudo '
. 어려운 부분은 이 동작을 잃지 않도록 sudo 함수를 정의하는 것입니다.
나는 다음을 제안합니다. 이 sudo
함수를 통해 첫 번째 매개변수를 읽습니다. 그렇다면 v
우리는 그렇게 할 것입니다 sudo -E nvim
. 다른 별칭인 경우 해당 별칭의 값으로 확장됩니다. 별칭이 전혀 아닌 경우 일반 sudo 명령을 사용하면 됩니다.
# for regular use, keep this alias
alias v='nvim'
# replace sudo with this functiom
sudo() {
# check if next argument is 'v'
if [[ "$1" == "v" ]] ; then
# remove 'v' from the argument list
shift
# call sudo -E nvim on remaining arguments
command sudo -E nvim "$@"
# exit the function with the return value of the
# sudo nvim -E command
return $?
fi
# now check if first argument is a different alias; if so,
# $expansion will be the alias definition if one exists,
# or else it will be the empty string
local expansion="${BASH_ALIASES[$1]}"
if [[ -n "$expansion" ]] ; then
# remove the alias from the argument list
shift
#if the expansion has variables in it,
#we need to expand those variables, not
#just the $expansion variable itself,
#so we use eval
eval "command sudo $expansion \"\$@\""
# exit the function with its return value
return $?
fi
# if we got here, what follows sudo is a
# normal command, so we execute sudo with the
# rest of the arguments as is
command sudo "$@"
}
아마도 더 쉬운 방법이 있을 것입니다. 하지만 제 생각에는 이것이 효과가 있을 것 같습니다.
물론 sudo에 대한 별칭 사용, sudoedit 사용 등과 같은 다른 간단한 대안이 있지만(일부는 다른 답변에 설명되어 있음) 구문은 원하는 것과 약간 다릅니다.