Меню в верхней строке, показывающее имя приложения, выглядит очень тонко. Я хотел бы сделать это смелым. Как бы я мог сделать это?
Мой gnome-shell.css находится в этой ссылке dropbox:
-121--900045-Как получить команду из истории по номеру в мою командную строку, не выполняя ее?
This immediately executes command number 555 which I'm not looking for:
$ history 10
$ !555
This opens the command up in an editor, which is overkill most of the time:
$ history 10
$ fc 555
This is an example of what I'm looking for:
$ history 10
$ #555
$ [command 555 from history listing now sitting here on my command line ready to edit or execute]
Спасибо!
shopt -s histverify
Если опция оболочки histverify включена и используется Readline, подстановки истории не передаются немедленно в синтаксический анализатор оболочки. Вместо этого расширенная строка перезагружается в буфер редактирования Readline для дальнейшей модификации.
Если вы используете bash
, что я предполагаю, вы и делаете; введите номер истории:
$ !555
Затем нажмите: Ctrl + Alt + e, Теперь нужная команда из истории сидит в вашем приглашении и ждет выполнения, не меняя поведения истории по умолчанию:
$ command
Это также работает для псевдонимов
, замен
, расширений
и аргументов истории, например: $ echo !555:1
, ~
, $HOME
, $(echo hi)
.
Так я убеждаюсь, какая именно команда из истории будет выполнена, прежде чем ее действительно запустить.
Добавьте : p
после цифр.
Пример:
1357 locate pam_loginuid
1358 history
rinzwind@discworld:~$ !1358:p
history
rinzwind@discworld:~$ !1357:p
locate pam_loginuid
rinzwind@discworld:~$
Напечатано для отображения, но не выполнено.
Чтобы использовать его в BASH, вам нужно сделать больше. Пример:
https://tldp.org/LDP/abs/html/histcommands.html
#!/bin/bash
set -o history
var=$(history); echo "$var" # 1 var=$(history)`
поместит всю историю в var, и вам понадобится дополнительная логика, чтобы найти нужную команду.
Вы можете использовать встроенную команду bash read
напрямую следующим образом:
read -e -i "! 555" -p "$ {PS1 @ P}" ввод; $ input
Или вы можете добавить его в функцию в ваш ~ / .bashrc
следующим образом:
showhist () {{{1} }
read -e -i "$ *" -p "$ {PS1 @ P}" input
$ input
}
и используйте его так:
showhist! 555
Это отобразит команду в командной строке, и вы сможете отредактировать ее .... Введите для выполнения или Ctrl + c для отмены.
edit: Сначала я ошибочно сказал "ctrl-f", где на самом деле это "ctrl-r" ... (который я использую несколько раз в день). Я отредактировал правильные команды сейчас ...
Не тот метод, который вы просили, но, вероятно, он подходит для того, что вам кажется необходимым (например, найти предыдущую строку в истории и отредактировать ее, прежде чем вводить / выполнять ее снова):
# in bash
[Ctrl]+r Foo
# This recalls the previous history line containing Foo, in edit mode.
# You can then:
# [Enter] to execute it "as is", and returns to prompt.
# -or- [Ctrl]+o executes it "as is" + presents the following
# history line, ready to be executed
# -or- <Leftarrow> or <Rightarrow> makes that line the current one
# and you can then edit it before executing it (what OP asked for)
# -or- [Ctrl]+c to return to the prompt without executing
# the currently displayed command line.
# -or- another [Ctrl]+r search the previous occurrence of Foo
Таким образом, нет необходимости вести историю и выясните, какой номер истории вам нужно отредактировать, и другую комбинацию, чтобы на самом деле получить и отредактировать его: [Ctrl] + r Something найдет для вас предыдущую строку (строки), содержащие Something и представить его в режиме редактирования. В общем, это намного быстрее.
Ctrl-o (вместо ввода) особенно полезен, если вам часто нужно отредактировать 1 команду и следовать за ней повторяющейся последовательностью команд.
И приятный бонус: этот ctrl-r и т. Д .: часто доступен в других программы (например, mariadb-server cli [полезно для получения последней команды 'use'] и, вероятно, многие другие). Вероятно, он основан на механизме "readline" (может быть предложен или, по крайней мере, используется), но я не знаю подробностей ...