예를 들어, ~/.bashrc
파일(또는 이에 상응하는 항목)에서 본 일반적인 별칭은 다음과 같습니다.
alias rm='rm -i'
그러나 나는 사람들이 이 일을 거부하는 것을 보았습니다.
- 다른 시스템에는 별칭이 없을 수 있으며 주의하지 않았기 때문에
rm
실수로 중요한 항목을 삭제했습니다.[1] - 이 별칭을 사용하면 본질적으로 모든 명령 뒤에 or 를 입력하도록 스스로 훈련하게 되며
y
, 이는 전체 목적을 무효화합니다.yes
rm
이에 반대할 다른 이유가 있습니까? 일부 프로그램이 rm
를 호출하는 대신 단순히 호출 \rm
하고 별칭을 사용하면 문제가 발생할 수 있습니까?
나는 rm
이것을 단순히 예로 사용하고 있지만 별칭 cp
이나 mv
별칭으로 덮힌 명령과 같은 다른 명령도 본 적이 있습니다. 개인적으로 나는 다음과 같은 별칭을 사용하도록 천천히 훈련하고 있습니다 rm -i
.
alias trash=`mv -v -t $HOME/.Trash`
답변1
bash를 사용한다고 가정하면 비대화형 bash 쉘은 or를 얻지 못하기 때문에 스크립트에 문제가 발생하지 ~/.bashrc
않습니다 ~/.bash_profile
. 스크립트). 그러나 스크립트를 소싱하는 경우 문제가 발생할 수 있습니다.
$ alias echo='command echo foo'
$ cat > script << 'EOF'
> #!/bin/bash
> echo bar
> EOF
$ chmod a+x script
$ ./script
bar
$ . ./script
foo bar
귀하의 질문은 기존 명령의 앨리어싱에 대한 대부분의 일반적인 문제를 다룹니다. 주요 문제는 언뜻 동일해 보이는 익숙하지 않은 상황이 크게 다른 결과를 생성할 수 있다는 것입니다. 예를 들어, 별칭 rm
to는 rm -i
좋은 의도를 가지고 있지만 실제로는 귀하가 언급한 이유로 인해 나쁩니다.
답변2
"그렇지 말라고 조언할 다른 이유가 있나요?"
틀림없이:
(3) 언젠가는 내가 쌓아온 기반을 더하고 싶기 때문이다.[---------]별칭 표준 명령이 표준 명령임에도 불구하고 별칭 표준 명령을 사용하는 것에 대해 다른 사람을 처벌하는 편집증적인 사람들.
그러나 엄밀히 말하면 이것은 단지 경고일 뿐이다. 당신이 파멸의 깊은 구덩이에 빠지지 않을 것이라고 믿는다면 조심하고 계속 나아가십시오.
개인적으로 나는 표준 명령에 별칭을 거의 추가하지 않습니다. 나는 약간의 편집증적이고 항문 보수적이기 때문에 약간의 변형을 사용합니다. 그러나 내가 찾은 좋은 용도는 루트 또는 다른 사용자로 자주 로그인하는 시스템에서 실수로/느리게 루트로 실행하고 싶지 않은 것들이 있습니다.
alias irc="echo \"No you don't!\""
또는
alias irc="su irc_user"
답변3
극단적인 예로, 표준 명령에 별칭을 지정하는 것이 해로울 수 있는 이유를 설명하기 위해 표준 명령에 별칭을 지정하겠습니다.
alias ls='rm'
분명히 이것은 언젠가는 불쾌한 놀라움을 야기할 것이기 때문에 나쁜 것입니다. 마찬가지로 표준 명령을 별칭으로 바꾸면 예상치 못한 불행한 사고가 발생할 수 있습니다.
하지만 거의 모든 Unix 관리자가 경력 중 어느 시점에 직면하게 되는 일반적인 시나리오를 소개하겠습니다.
미래의 어느 날, 당신은 새로운 일을 시작하고 다른 사람이 구축한 새로운 시스템에서 작업하게 될 것입니다. 토요일 새벽 3시는 마음이 맑지 않고 실수하기 쉽습니다. 표준 환경을 사용할 수 없습니다. 사실, 당신은 루트입니다.
rm
이 점을 감안할 때 'is't'의 별칭을 기억하시겠습니까 rm -i
? 로그인할 때마다 특수 별명을 확인하시나요? 루트의 환경을 바꾸면 동료들이 그 변화에 만족할까요?
솔직히 말해서, 나는 그것에 대해 울타리에 있습니다. 저는 경력 동안 수천 개의 시스템에서 작업해 왔으며 모든 시스템의 환경을 수정했다면 그 가치를 확인하기 어려울 것입니다.
앨리어싱은 매우 일반적 rm
이며 rm -i
이를 통해 많은 문제를 예방할 수 있지만 실수로 삭제된 파일을 복구하려면 많은 놀라움과 추가 작업 시간이 필요합니다.
그래서 이제는 일반적인 시스템 명령에 별칭을 사용하지 않으려고 노력합니다. 대신 별칭과 함수를 사용하여 셸에서 쉽게 수행할 수 없는 작업을 수행합니다. 이제는 별칭에 다음과 같은 추가 문자를 추가하는 경향이 있습니다.
# List long, with color or special characters, depending on OS
alias ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias l.='ls -l -Ad .????*'
# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'
### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }
새로운 관행에 적응하는 데 시간이 걸리므로 최종 별칭을 정말로 제거해야 할 수도 있습니다.
# For safety!
alias rm='rm -i'
답변4
이름 바꾸기별칭(예: )에 대한 표준 명령은 rm=rm -i
별칭을 사용할 수 없는 경우 확실히 놀라운 결과를 가져올 것입니다. 나는 이와 같은 명령을 사용하지 않는 편이 낫고 (여러 번의 고통스러운 경험을 통해 ;-) 모든 명령을 두 번 읽거나 잠재적으로 파괴적인 명령 rm
인 경우 세 번 읽는 데 익숙해졌습니다 mv
. 이러한 별칭은 자동으로 "rm foo" ENTER "y"를 생성합니다.이런! !무엇이든(매번 추가 키 입력이 필요함)
하지만 그게 바로 나야. 익숙하지 않은 환경(다른 컴퓨터, 다른 사용자...)에서 실행하고 싶지 않고 어디에 있든 즐겨찾는 별칭을 설치하고 싶다면 자유롭게 설치하세요. 우리 모두 알고 있듯이 Unix는 사용자에게 자살할 수 있는 충분한 밧줄을 제공합니다.