Команда перед кожною командою bash


18

Хто-небудь знає засіб поставити команду 'time' перед кожною командою в bash сесії?


1
так що ... ви хочете автоматично додавати "час" до кожного командного рядка?
шарлатаний кіхот

1
так, уважно ... для мезуараменту виступу очевидно
jthoenes

Відповіді:


37

Вибачте за неправильну відповідь раніше, я неправильно зрозумів ваше запитання.

Щоб додати час перед кожною командою, яку ви виконуєте на оболонці, ви можете зробити щось подібне

bind 'RETURN: "\e[1~time \e[4~\n"'

Це дозволить відновити ключ повернення. Тепер кожен раз, коли ви натискаєте return, а не писати новий рядок \ n, він перейде на початок рядка, введіть текст "час" і пробіл, перейдіть до кінця рядка і введіть новий рядок \ n, тим самим створивши потрібний ефект.

Якщо ви не хочете принести в жертву клавішу Enter, ви можете зробити "другий" контрольний ключ, як F12, прив'язуючи подібну команду

bind '"\e[24~": "\e[1~time \e[4~\n"'

Тепер замість того, щоб замінити ключ повернення, ви зв'язали F12.

Передумовою всього цього є те, що bash використовує GNU readline для читання команд. Тож readline - це хороша відправна точка для подальших маніпуляцій командами тощо.


1
+1 приємне рішення! Мені подобається ідея мати ключ введення тестування окремо від звичайного клавіші введення.
шарлатаний кіхот

це розумна ідея. Як ви можете узагальнити його для виконання визначеної користувачем функції перед кожною командою? Я не знаю, як поєднати bash-код і функцію readline в одному і тому ж прив'язці.
Жил "ТАК - перестань бути злим"

Це не буде працювати в Mac? Я запустив команду в терміналі, і клавіша введення, схоже, зараз нічого не робить.
Akki

6

Я розумію, що це поза межами цього питання, але ...

У zsh(що, наскільки мені відомо, супер набір bash), якщо ви встановите у своєму .zshrcфайлі таку змінну :

export REPORTTIME=5

Кожна команда, яка займає більше 5 секунд (я майже впевнений), відображатиме результат time. Усі команди, які швидше виконуються, не відповідають. І в таких випадках насправді все одно, тому приємно не захаращувати речі. Існує також багато інших цікавих функцій, zshякими ви можете насолоджуватися, перебуваючи на ній.


Гарна порада. Хоча zsh, безумовно, має набір функціональних можливостей bash , його синтаксис не є супернабір синтаксису bash , тому він не є заміною "падіння".
Кріс Джонсен

1

Включіть \ t у рядок підказок. Він включить час у вашому запиті в точку, де ви його включите. Дивіться: http://www.ibm.com/developerworks/linux/library/l-tip-prompt/


Це поточний час у момент генерації підказки, а не час, необхідний для виконання попередньої команди.
Призупинено до подальшого повідомлення.

Правда; і різниця між поточним та поточним часом наступного підказки - це час виконання (мінус час набору тексту, звичайно - тут є ваш друг). Ключові переназначення не потрібні.
JRobert

0

PS1 здається стандартним способом зробити щось подібне.


2
Він змінює дисплей, а не фактично виконану команду.
користувач1686

@grawity Правильно - але це дасть тобі саме те, що ти хочеш ... час передбачив кожен рядок.
Джейсон Сундрам

3
Що абсолютно відрізняється від того, що timeробить (він вимірює, скільки часу знадобилося для виконання команди).
користувач1686

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