Я хотів би налаштувати bash для виконання clearкоманди кожного разу, коли я набираю якусь команду в терміналі (перед виконанням моєї команди). Як я можу це зробити?
Я використовую Debian Linux.
Я хотів би налаштувати bash для виконання clearкоманди кожного разу, коли я набираю якусь команду в терміналі (перед виконанням моєї команди). Як я можу це зробити?
Я використовую Debian Linux.
Відповіді:
Bash має попередній гачок . Типу.
preexec () {
clear
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
Enter, перш ніж виконати команду. Це працює для мене так. Гак preexec виконується для кожної інтерактивної команди, не має значення, чи є команда вбудованою чи зовнішньою командою чи багатьма командами.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;проблема не в тому, що запускається PROMPT_COMMAND, а також потрапляє в пастку після фактичної команди; Також хтось може мені сказати, чому local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;тут?
history -1друкує останній командний рядок, перед ним номер історії. Sed-фільтр знімає номер історії.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Після цього кожен раз, коли ви натискаєте returnзамість того, щоб просто писати, \nвона перейде на початок рядка, введіть текст clear;, а потім перемістіться до кінця та введіть, \nяк очікувалося.
clearкоманд командами.
clearвиконується до того, як вихід команд і команд не зникне. Однак у разі оперативного підключення це робить.
clear;до виходу для кожного додаткового \n.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""він переміститься на початок, введіть ls;#коментування того, що там було, і запустіть lsкоманду належним чином! Дякую!
із запитання, яке я задав сьогодні (з урахуванням відповіді користувача @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
\C-mІмітуючи клавішу «Enter», то \C-lімітуючи , Ctrl+lяк це ясно , і \C-jце «новий рядок-і-відступу», тому команда є обов'язковим Введіть ключ Ctrl + L & Ctrl + J
що працює на GNU bash, версія 3.2.53 (1) -release (x86_64-apple-darwin14), а інших відповідей на цю тему немає. Крім того, це не забруднює історію за допомогою "чітких" команд для будь-якої іншої команди.
cb4() {
preexec () {
clear
}
}
Для цього використовується гачок, що називається preexec, підтверджена робота і з zsh
Потім будь-який сеанс, який ви хочете автоматично очистити перед кожною командою, яку ви запускаєте: cb4
preexec () {
clear
}
замініть слово clearнаtput reset
tput необов’язково, але прискорює процес скидання