마이너스 빼기 방법?


83

아침에 따옴표를 잊었을 때 모닝 커피가 아직 내 두뇌에 도달하지 못했습니다.

alias grep="grep --color=always"

그래서 대신 입력했습니다 :

alias grep=grep --color=always

나를 떠나 :

--color=always
grep=grep

내 별칭에.

--color = always를 정리하려고 unalias --color하면 다음과 같은 결과가 나타납니다.

bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]

나는 탈출, 인용 및 구걸을 시도했지만, 코만도 unalias 정리 혼란을 만드는 방법을 알 수 없습니다.

(다시 시작하면 트릭을 수행하지만 다른 방법이 있어야합니다.)


13
하하, 이제 나도 갇혀있어서 작업 중 편집 : choroba의 답변이 나를 위해 일한 것 같습니다
asmith

9
옛날을 생각 나게 echo > \\?\c:\windows\x.하거나 그때 rm -rf * ~우연히 생각 나게합니다 .
Jason C

답변:


127

POSIX 호환 시스템이 --인수 앞에 추가하여 명령에서 대시를 해석하지 않도록 할 수 있습니다 .

mtak@frisbee:~$ alias grep=grep --color=always
mtak@frisbee:~$ alias | grep color
alias --color='always'

mtak@frisbee:~$ unalias -- --color
mtak@frisbee:~$ alias | grep color
mtak@frisbee:~$

다른 유틸리티에서도 작동합니다 -bla. 파일 이름이이라고 가정 해 봅시다 . 함께 제거하려고 rm하면 다음 오류가 발생합니다.

mtak@frisbee:~$ ls -- -bla
-bla
mtak@frisbee:~$ rm -bla
rm: invalid option -- 'b'
Try 'rm ./-bla' to remove the file '-bla'.
Try 'rm --help' for more information.

--파일 이름 앞에 사용 하면 파일이 제거됩니다.

mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory

19
파일에 대해서는 주목할 가치가 있지만 똑같이 유효한 방법은 이것을 피하는 파일 경로를 사용하는 것입니다. 그래서 당신은 사용할 수 있습니다 ls ./-blarm ./-bla(또는 귀하의 경우 쉽게 어떤 전체 경로를 지정). 분명히 이것은 별칭에 대해 작동하지 않습니다!
Muzer


93

별칭을 설정하는 데 사용한 것과 동일한 트릭을 사용하십시오.

unalias whatever --color

9
실제로, +1 작동하지만 다른 솔루션은 약간 깨끗합니다 :)
Requist

1
실제로, 물론 :-)
choroba

unalias unalias --color
Cœur

3

빠른 솔루션

잘못된 별칭을 모두 고치려면 간단히 실행할 수 있습니다.

unalias grep --color


무슨 일이 있었는지 이해

alias grep=grep --color=always없이 잘못된 명령 을 내 "..."립니다.

  • 두 개의 별칭을 설정 --color 하고 grep; 실제로 출력의 왼쪽에서 읽을 수 있습니다 (왼쪽의 모든 =명령은 별칭이 지정된 명령 임).

    --color=always
    grep=grep

    따라서 둘 다 설정을 해제해야합니다.

  • 왜 이런 일이 일어 났습니까? 별명의 공관에 그 한 줄에 여러 대입을 할 수 있습니다 의미합니다 :
    ...

    별명 : 별명 [-p] [name [= value] ...]

    출력 help alias에서 시놉 틱을 읽을 수 있지만 man bash같은 줄에서 동시에 나열하고 할당 할 수있는 것을 읽을 수 있습니다.

    인수가 제공되면 값이 지정된 각 이름에 별명이 정의됩니다. 값의 후행 공백은 별명이 확장 될 때 다음 단어에서 별명 대체를 검사합니다. 값이 제공되지 않은 인수 목록의 각 이름에 대해 별명의 이름과 값이 인쇄됩니다.

  • 첫 번째 설정 --color만 해제하는 데 문제가 있습니다 .
    이것은 때문에 그것은 옵션으로 해석됩니다 에 대한 alias쉘에 의해; 이를 피하려면 bash쉘에 다음 옵션이 아니라는 사실을 알리십시오.

  • 성배 리눅스는 :man 이 경우 man bash이 같은 상황에서 유용 보물로 가득 찬 금고입니다.
    당신은 읽을 수 있습니다 man bash:

    -A-옵션의 끝을 알리고 추가 옵션 처리를 비활성화합니다. -뒤에 오는 인수는 파일 이름과 인수로 취급됩니다 . -의 인수는-와 같습니다.

    다른 답변에서보고 된 바와 같이 POSIX 방식은 특수 문자 조합을 사용하는 것 --입니다.

    unalias -- --color
  • 근데 unalias grep --color일하는거야? 나는 사용하지 않고 의미 --합니까?
    그것을 위해 일한으로 alias도 대한 unalias이 (다시 한 번에 두 개 이상의 이름을 부여 할 수 있습니다 [...]).

    unalias: unalias [-a] name [name ...]

    나는 단지 내 추측 만 할 수있다. 좋은 프로그래밍 습관은 같은 논리 아래에서 동시에 읽기와 쓰기 루틴을 쓰는 것이다. 따라서 alias및 의 옵션 구문 분석 루틴에 대한 것이어야합니다 unalias.

    이것이 작동한다는 것은 모든 별칭을 지우지 않는이 명령 (이 목적으로 열린 쉘에서)에서도 볼 수 있습니다.

    unalias whatever -a

최종 비고

man bash보고 된 몇 가지 중 BUGS 섹션에서 다음을 읽을 수 있습니다.:-)

일부 용도에서는 별칭이 혼동됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.