Поиск webkit-sharp-devel на software.opensuse.org, который перечисляет все официальные пакеты, не возвращает результата. Который приводит меня к cobnclusion, что нет такого пакета в opensuse 12.3. Хит newarest резок WebKit.
Таким образом, вы можете получить четкое представление о том, как оболочка определяет местоположение команд несколькими разными способами. Вы можете использовать...
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
Что означает, что оболочка подменила содержимое псевдонимов в имени функции - что не является позицией, которую обычно можно ожидать расширения - переопределили echo
s и still, после чего выполнили функции.