Я пытался сбежать, цитировать и просить, но не могу понять, как заставить коммандос unalias убирать беспорядок.
(Я знаю, что перезапуск поможет, но наверняка должен быть другой путь)
Ха-ха, теперь я тоже застрял в нем, работая над ним. РЕДАКТИРОВАТЬ: похоже, ответ Чоробы на меня
asmith 7 лет назад
13
Что-то напоминает мне о старом `echo> \\? \ C: \ windows \ x`, или о том, что я случайно` rm -rf * ~ `.
Jason C 7 лет назад
9
3 ответа на вопрос
128
mtak
Вы можете избежать 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
Хотя стоит отметить, что для файлов одинаково допустимым методом является использование пути к файлу, который избегает этого; так что вы можете использовать `ls ./- bla` и` rm ./- bla` (или указать полный путь, что проще в вашем случае). Очевидно, что это не работает для псевдонимов, хотя!
Muzer 7 лет назад
19
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html Положение 10
DarkHeart 7 лет назад
1
94
choroba
Просто используйте тот же трюк, который вы использовали, чтобы установить псевдоним
unalias whatever --color
работает действительно, +1, но другое решение немного чище :)
Requist 7 лет назад
9
Действительно, конечно :-)
choroba 7 лет назад
1
`unalias unalias --color`
Cœur 7 лет назад
0
3
Hastur
Быстрое решение
Чтобы исправить оба неправильных псевдонима, вы можете просто запустить
unalias grep --color
Понимание того, что случилось
Вы даете неправильную команду alias grep=grep --color=alwaysбез "...".
Вы устанавливаете два псевдонима--color и grep; на самом деле вы можете прочитать его в левой части вашего вывода (все слева от команды =с псевдонимами):
--color=always grep=grep
так что вам нужно сбросить оба.
Почему это случилось? В синоптических псевдонимов означает, что можно сделать несколько ассигнование в одной строке: ...
псевдоним: псевдоним [-p] [имя [= значение] ...]
В выводе help aliasвы можете прочитать синоптик, но из man bashвы можете прочитать, что можно в одной строке даже перечислить и назначить одновременно:
Когда предоставляются аргументы, псевдоним определяется для каждого имени, значение которого задано. Завершающий пробел в значении вызывает проверку следующего слова на предмет замены псевдонима при раскрытии псевдонима. Для каждого имени в списке аргументов, для которого не указано значение, выводятся имя и значение псевдонима ...
У вас есть проблемы, чтобы сбросить первый в --colorодиночку . Это потому, что оно интерпретируется как варианты для aliasвашей оболочки; чтобы избежать этого, вам нужно сообщить вашей bashоболочке, что то, что следует за ней, не вариант.
Святой Грааль в Linux: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среди немногих сообщений, которые вы можете прочитать, вы можете прочитать:-)