@Карлсон Правда. Поэтому хотел узнать мнение сообщества. Мой тоже такой, поставил на 5 мин, это ноутбук Corp и политику/профиль усиливает его, увидеть ДУП я связан. @Ooker по той простой причине, я не доверяю первому встречному, особенно с публикации идеи. Обратите внимание, я не хочу украсть вашу идею. Однако, если я вижу некоторые ошибки или плодотворных путей, вытекающих из вашей работы, и если я им предложила, я получу кредит? Я получаю много писем от студентов, желающих, чтобы я был их псевдо-научный руководитель. В идеальном мире, да, я рад помочь, но .... Верно, но я не намерен подразумевает этот профессор студенты советник; если они обычные, они должны попросить их быть. Если у них уже есть другой советник на эти вопросы можно перейти к ее/его и т. д. Да потому что я сидел в папку, я хочу скопировать, но теперь файл flv принимает сто лет на русский, поэтому не могу даже представить, что вся система будет считать. @Версия JigglyNaga добавил в вопрос

Я в конечном итоге не нужно PROMPT_COMMAND на всех. Спасибо Кристоферу за указал мне в правильном направлении.

Вместо этого, попробуйте этот файл, пс1.приглашение:

${__cmdnbary[\#]+$(
 эхо 'и\U@\Ч: \Ш' # ваши фантазии подскажут тут, со всеми обычными специальных символов.
) }${__cmdnbary[\#]=}\$

Я могу потом кормить это в мою ПС1:

ПС1=$(кошка пс1.подскажите)

(Вы не должны делать это таким образом, но я нашел его удобным для иллюстрации и редактирования.)

И так мы видим:

mikemol@Зоя:~$ Эхо привет
привет
mikemol@Зоя:~$ Эхо Хо
Хо
mikemol@Зоя:~$ Эхо Хум
Хум
mikemol@Зоя:~$ 
mikemol@Зоя:~$ ПС1=$(кошка пс1.подскажите)
$ 
mikemol@Зоя: ~ $ Эхо привет
привет
$ Эхо-Хо
Хо
$ Эхо Хум
Хум
$ 
mikemol@Зоя: ~ $ 

Мы используем массив взломать показали здесь, но вместо того, чтобы использовать Баш${параметр:-слово} параметр подстановки, мы используем ${параметр+слово} так у нас срабатывают только на отсутствие предыдущей команды run.

Это требует некоторых пояснений, поскольку мы вынуждены использовать двойной негатив в нашу логику.

Как ${__cmdnbary[\#]-слово}${__cmdnbary[\#]=} работает

В исходном массиве взломать демонстрации, конструкция ${__cmdnbary[\#]-слово}${__cmdnbary[\#]=} был использован. (Я заменил $? со словом для ясности). Если вы не особо знакомы с разложения по параметру и массивы (я не был), это вообще не понятно что происходит.

Во-первых, понять \#

В инструкции:

\# команду номер этой команды

...

Команда номер позиции в последовательности команд, которые выполняются в ходе текущей сессии оболочки.

Это означает, что \# изменится только если и только если команда выполняется. Если пользователь вводит пустую строку в командной строке, команда не выполняется, и поэтому \# не изменится.

Установка пустую строку в ${__cmdnbary[#]=}

${__cmdnbary[\#]=} использует параметр расширения. Возвращаясь к инструкцию:

${параметр:=слово}

Присвоить Значения По Умолчанию. Если параметр не установлен или нулевой, расширение слово присваивается параметр. Значение параметра затем заменяется.

Поэтому, если __cmdnbary[\#] не установлен или нулевой, эта конструкция будет присвоить пустую строку (слово - пустая строка в нашем случае) и всю конструкцию можно будет заменить в нашем выходе с той же пустой строкой.

__cmdnbary[\#] будет всегда быть установлен или нулевой, первый раз мы его видим, с # - это монотонная--он всегда увеличивается или остается прежним. (То есть, до ее петли, скорее всего 2^31 или 2^63, но есть другие проблемы, у нас будет долго прежде чем мы туда доберемся. Есть причина, по которой я опишу решение, как немного взломать.)

Условно в ${__cmdnbary[\#]-слово}

${__cmdnbary[\#]-слово} еще один параметр расширения. Из руководства:

${параметр:-слово}

Использовать Значения По Умолчанию. Если параметр не установлен или нулевой, расширение слово заменить. В противном случае, значение параметра заменяется.

Так, если массив запись в \# будет установлен или нулевой, слово становится на свои места. Так как мы не пытаемся присвоить __cmdnbary[\#] (с помощью ${параметр:=слово} подстановка), пока после того как мы проверить его, мы впервые проверяем его по заданной \# должны найти эту позицию в массиве отменить.

Баш использует разреженные массивы

Одно уточнение для тех, кто привык к C-массивы в стиле. баш на самом деле использует разреженные массивы; пока вы не добавите что-то на позицию в массиве, что позиция отменена. Пустая строка-это не то же самое, что "нуль или отключено".

Почему мы используем ${__cmdnbary[#]+слово}${__cmdnbary[#]=} вместо

${__cmdnbary[\#]+слово}${__cmdnbary[\#]=} и ${__cmdnbary[#]-слово}${__cmdnbary[#]=}выглядят очень siilar. *Только* что мы изменить между двумя конструктов можно найти в первой части, мы используем${параметр:+слово}вместо${параметр:-слово}`.

Помните, что с ${параметр:-слово}, слово появляется только если параметр имеет значение null или отключенное ... в нашем случае, только если мы не установить позицию в массиве, который мы не сделали, если и только если \# был увеличен, но это произойдет только если мы просто выполнили команду.

Это означает, что, с ${параметр:-слово}, мы будем только настоящее слово , если мы не выполнили команды, которая как раз обратное тому, что мы хотим сделать. Итак, мы используем ${параметр:-слово} вместо этого. Опять же, из инструкции:

${параметр:+слово}

Использовать Альтернативное Значение. Если параметр имеет значение null или отключено, ничего не заменяется, в противном случае расширение слово подставляется.

Который (к сожалению), еще дважды отрицательной логики, чтобы понять, а есть вы.

Сама подсказка

Мы объяснили механизм переключения, но насчет приглашения сама?

Здесь я использую $( ... ) содержит мясо приглашения. Прежде всего для моего собственного блага для чтения; вы не должны делать это таким образом. Вы можете заменить $( ... ) с тем, что обычно вещи в переменной.

Почему это взломать?

Помню, как мы добавляем записи в разреженный массив? Мы не удаляем эти записи, и поэтому массив будет вечно расти до тех пор, пока оболочка сеанс завершился; раковины протекает через ПС1. И насколько я знаю, нет никакого способа, чтобы сбросить переменную или массив позицию в строке. Вы могли бы попробовать В $(), но вы найдете это не будет работать; изменения переменной пространства имен в случае, когда не будет применяться к пространству в том случае, когда был раздвоенный от.

Вы могли бы попробовать использовать mktmp раньше .bashrc и, прежде чем ПС1 назначения, и вещи, данные в результирующий файл; потом вы могли сравнить ваши текущие \# против того, что вы хранили там, но теперь вы сделали ваш запрос зависит от дискового ввода-вывода, который является хорошим способом, чтобы запереть себя в чрезвычайных ситуациях.