Как подкачать две команды в ударе?

Поиск webkit-sharp-devel на software.opensuse.org, который перечисляет все официальные пакеты, не возвращает результата. Который приводит меня к cobnclusion, что нет такого пакета в opensuse 12.3. Хит newarest резок WebKit.

4
01.03.2015, 14:16
1 ответ

Таким образом, вы можете получить четкое представление о том, как оболочка определяет местоположение команд несколькими разными способами. Вы можете использовать...

command command_name

... чтобы инструктировать оболочку только вызывать имя_команды , если это исполняемый файл $PATH . Это важно в таких случаях, как ваш, потому что после завершения расширения псевдоним A ссылается на псевдоним B, который ссылается на псевдоним A обычно примерно 20 раз до того, как расширение псевдоним перестанет повторяться - и который приземляет вас обратно с того места, с которого вы начали. Если вы точно хотели вызвать исполняемый файл $PATH d B только при вызове A, и наоборот, вы можете сделать....

alias A='command B' B='command A'

... что должно позволить избежать даже вызова функций с именами A или B. Иначе - так как оболочка не раскроет цитируемый псевдоним A и как псевдоним B, но все равно вызовет функцию, даже если ее имя_команды будет цитироваться как , вы можете цитировать A и B в определениях типа....

alias A=\\B B=\\A

Хорошо, значит, это не повторяется двадцать раз. Я мог бы поклясться, что прочитал это на какой-нибудь странице man, но я думаю, что это, по крайней мере, не верно ни для bash, ни для ksh (пока что проверив только одну из них). На самом деле, это повторяется только дважды:

n=0
A(){ echo not B; n=0; }
B(){ echo not A; n=0; }
alias A='echo "$((n+=1))";B' B='echo "$((n+=1))";A'

Если я сделаю вышесказанное и сделаю....

A

... в bash он печатает:

1
2
not B

Полагаю, это относится к этому из руководства bash:

  • Первое слово заменяющего текста проверяется на псевдонимы, но слово, идентичное расширяемому псевдониму, не расширяется во второй раз. Это означает, что, например, можно использовать псевдоним ls -Fls -F, и bash не пытается рекурсивно расширить заменяющий текст.

Я читал это раньше, но не думал, что при этом будут проверяться все расширения, ведущие к текущему расширению - я подумал, что это относится только к последнему расширению в цепочке. В любом случае, похоже на то.

Я все-таки заметил интересное поведение. После того, как я уже объявил и псевдонимы, и функции, я пошел перезапускать команды, но с чуть меньшим вмешательством белого пространства - вот так:

A(){ echo not B; }; B(){ echo not A; }; A; B

........

1
2
3
4
5
6
not B
7
8
not A

Что означает, что оболочка подменила содержимое псевдонимов в имени функции - что не является позицией, которую обычно можно ожидать расширения - переопределили echos и still, после чего выполнили функции.

5
27.01.2020, 20:54

Теги

Похожие вопросы