Можно ли получить фактические команды, введенные в истории Bash? Если команда включала (например, подстановку или модификатор истории), то, что видно в истории, является полученной командой, а не напечатанной командой.

Пара примеров. Предположим, что для обеих команд в истории команда 123 - это ls Red*

  1. Если я введу !123 чтобы использовать командную строку 123 из истории, а теперь посмотрим на самую последнюю команду в моей истории, я буду видеть ls Red* а не !123

  2. Если использовать встроенную команду оболочки fc -s Red=Blue 123 и посмотреть историю, я увижу ls Blue* а не fc -s Red=Blue 123

Точно так же, если я использую стрелку вверх (создавая escape-последовательность ^[[A), я получаю расширенную команду, а не фактический набранный текст).

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

Я понимаю, что это будет еще сложнее после инициализации оболочки, поскольку HISTFILE не содержит эту информацию. Я не заинтересован в получении оригинального текста в этом случае (хотя это интересно).

1 ответ1

1

Фактический ответ на заданный вами вопрос: «Нет, bash не имеет такой функции». Это было то, о чем я думал около десяти лет назад, когда я работал в том же здании, что и основная команда GNU, и поэтому я пошел и поговорил с ними и, по-видимому, добавил, что это будет PITA (включая выяснение синтаксиса и сохранение всех что лишняя история). Многие люди иногда извлекали бы выгоду, но было много больших проблем для решения, так что вряд ли это было решено.

С другой стороны, я часто обнаруживал, что использование функций вырезания и вставки X11 может удовлетворить мои реальные потребности практически в каждом случае. Это стало еще лучше благодаря открытию следующего кусочка магии XResource :

*cutToBeginningOfLine:      False

Если вы знаете, где находятся ваши XResource , вы можете добавить эту строку в этот файл. Если вы не можете определить это, вы можете просто добавить echo '*cutToBeginningOfLine: False'|xrdb -merge в один из ваших файлов запуска (например, .profile , но зависит от вашей оболочки).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .