Я хотів би налаштувати 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
необов’язково, але прискорює процес скидання