Виконайте команду, затінену псевдонімом


163

Скажімо, у мене є наступний псевдонім у bash - alias ls='ls --color=auto'- і я хочу називати звичайний lsбез варіантів. Єдиний спосіб зробити це - скасувати неповторність, виконати команду, а потім знову псевдонім? Або є якась хитра хитрість чи вирішення?


2
Лише примітка про деякі відповіді нижче: "команда" є ТОЛЬКО безпечним способом цього досягти. Наприклад, "." або вбудований "джерело" може бути замінений функцією, визначеною сценарієм. "командувати." або "джерело команд" - це єдиний спосіб безпечного виконання джерела, без того, щоб замість нього була викликана визначена сценарієм функція. Жодна з інших альтернатив, включаючи метод зворотної косої риски "\.", Не працює, і, звичайно, немає альтернативи "/ bin / source", яку можна викликати, вказавши повний шлях.
Dejay Clayton

Відповіді:


209

Ви також можете встановити префікс задньої косої риси, щоб відключити псевдонім: \ls

Редагувати: інші способи зробити це включають:

Використовуйте "команду": command lsвідповідно до Мікелю .

Використовуйте повний шлях: /bin/lsвідповідно до утери .

Цитуйте команду: "ls"або 'ls'відповідно до коментаря Мікеля.

Ви можете видалити псевдонім тимчасово для цього термінального сеансу за допомогою unalias command_name.


Це мій стандартний спосіб зробити це.
ncmathsadist

дуже приємно, також добре працює з tcsh
Левон

10
Цей спосіб дуже корисний. Він лише обходить псевдоніми, а не функції, що робить його відмінним від commandабо builtin.
Мікель

1
Здається, l\sробить те саме. Це поведінка помилка чи особливість?
Ніклас Б.

4
Це "особливість". Розширено лише псевдоніми, які не котируються. Таким чином, ви можете помістити його в лапки або використовувати зворотний нахил в будь-якому місці. Дивіться посилання на баш псевдоніми .
Мікель

79

Ось для чого призначена commandкоманда.

Спробуйте

command ls

Це повідомляє оболонці обходити псевдоніми та функції.

Цей спосіб підтримується bash , zsh та ash / dash.


2
Найкраща відповідь, чому це не найбільше цінується? :) +1
0xC0000022L

11
Тому що він додає у 8 разів більше символів як метод зворотної косої риси
JoelFan

1
@STATUS_ACCESS_DENIED Це також не працює з tcsh (а отже, імовірно, не з csh). Метод `\` робить
Левон

3
Функція зворотного нахилу не захищена. Хоча він забезпечує захист від аналогічно названих псевдонімів, він не забезпечує захист від аналогічно названих функцій.
Dejay Clayton

2
@JoelFan Я б швидше мав декілька зайвих символів, і мої сценарії будуть легко дотримуватися і працювати для всіх. Замість криптичного косого риса, який не є інтуїтивно зрозумілим, його легко пропустити, не добре зафіксовано та не працює для обходу функцій.
Денніс

19

Псевдонім - це лише визначений ярлик. У цьому прикладі визначений псевдонім - це рядок ls, який виконується ls --color=auto. Якщо ви не хочете такої поведінки, ви можете зателефонувати у двійковий файл, lsвикористовуючи абсолютний шлях.

Тож виконання просто /bin/lsдасть вихід без кольору, оскільки це не псевдонім, який ви визначили.

Ви також можете змінити псевдонім на щось інше або додати новий псевдонім, який виконується просто lsбез параметрів кольору.


2
Ви повинні знати, де команда. У деяких системах поділ між /binі /usr/binє довільним.
Кіт Томпсон

@KeithThompson Для цього ви можете використовувати whichдля деяких команд: which ls.
cst1992

@ cst1992: Якщо ви збираєтесь використовувати which(або type), він здійснює пошук через $PATH; ви можете просто використовувати lsабо \lsзамість того, щоб вказати шлях.
Кіт Томпсон,

10

Інший спосіб, спираючись на відповідь @ uther, полягає у використанні $(which ...)або `which ...`(за допомогою зворотних посилань ``) для автоматичного пошуку шляху виконання файлу. Це працюватиме в bash:

$(which ls)

`which ls`

Безсумнівно, просто префіксація команди з a \набагато коротше.

ОНОВЛЕННЯ : Відповідно до того, як використовувати `what` для псевдоніманої команди? , це зовсім не здається надійним.


Для чого потрібні дужки? Я думаю, ви маєте `which ls`на увазі безпосередньо виконувати двійковий файл.
amyassin

2
@amyassin: Обидва синтаксиси рівнозначні. (BTW, як ти
вклав основи у

Насправді (which ls)це не спрацювало для мене (на Ubuntu 12.04 LTS). А підставки були важкі, я просто уникнув їх: \ `котрий ls \`. Потрібно було багато редагувань, щоб потрапити туди :)
amyassin

1
@ user946850 "Щоб включити буквальний символ зворотного вибору в кодовий проміжок, ви можете використовувати декілька задників як роздільники відкривання та закриття". Джерело: Довідка по відмітці .
Мікель

@amyassin: Ви додали $?
krlmlr

2

Особисто я просто уникаю визначати псевдоніми з тими ж іменами, що й команди, тому lsзавжди викликаю фактичну команду. У мене є псевдоніми або функції для різних комбінацій опцій , таких як l, llі lg. (Це означає, що мені потрібно unalias lsв моєму .bashrcабо .cshrc.)

Я вважаю, що припущення ОС щодо того, яким варіантам я можу віддати перевагу (переосмислюючи припущення дизайнерів самої lsкоманди), рідко відповідають моїм особистим смакам. Мені, здається, не подобається зовнішній вигляд ls --color=auto, і його розбірливість може сильно відрізнятися між чорним на білому та білим на чорному.

YMMV, та інші рішення, звичайно, ще добре знати.


1

Введення команди в верхній регістр, здається, працює, як LS, хоча я не дуже впевнений, чому.


4
У якій оболонці, яка операційна система, який термінал тощо?
Мікель

@Mikel Існує пакет "sl", який надає "sl" як "ls". Підказки, які баш дає в Ubuntu, також кажуть, що "LS" надається "sl".
Ізката

1
Це bash 4 (встановлено разом із Fink) в Mac OS X 10.7. Він також працює для інших команд, які я відчув, як rm і grep.
асмеурер

3
Це просто жарт :) зі сторінки mn:LS - display animations aimed to correct users who accidentally enter LS instead of ls.
amyassin

7
Я думаю, що це працює для Mac OS X, оскільки його файлова система за замовчуванням нечутлива до регістру. Він не працюватиме на інших Unix.
Джандер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.