На этот вопрос уже есть ответ:
У меня в окне терминала есть сложная команда, которую я хотел бы отредактировать дальше. E. грамм.
echo "This is a complex command I want to edit in an editor"
Как передать эту строку кода - не вывод, а фактический код -, например, Gedit для дальнейшего редактирования? Что-то вроде этого решения, только для редактора на основе графического интерфейса: http://www.commandlinefu.com/commands/view/1446/rapidly-invoke-an-editor-to-wri te-a- long-complex-or-tricky-command
Обратите внимание, что я специально ищу способ редактирования во внешнем редакторе.
bash
, zsh
и ksh
(включая их производные) имеют эту очень аккуратную встроенную команду fc
, которая открывает редактор для изменения вашей предыдущей команды. Если переменная FCEDIT
не установлена, по умолчанию она вызовет редактор, установленный в EDITOR
; если переменная EDITOR
не установлена, по умолчанию она вызовет nano
.
Что вы можете сделать, это установить FCEDIT=/usr/bin/gedit
. Теперь есть хитрость: вы запускаете длинную команду, вы решаете, что хотите изменить ее, поэтому сразу же после ее запуска вызовите fc
. Откроется окно gedit
с вашей командой, готовой к изменению. Как только вы закончите изменять, сохраните и выйдите, как обычно.
Недостаток? Это оставит след ненужных сообщений gtk в терминале. Лично я использую редакторы командной строки vim
или nano
, а не gedit - они не оставляют никаких следов, кроме того, их можно использовать в TTY
не только в среде GUI. Я настоятельно рекомендую вам переключиться на nano
, так как это один из самых простых текстовых редакторов командной строки.
Дополнительная заметка в bash
, вы можете сделать то же самое с командной строкой , которую вы сейчас редактируете с помощью ctrl kbd> + X < / kbd> + E kbd> или ctrl kbd> + X kbd> - ctrl kbd> + E kbd>; вы можете иметь то же поведение в zsh
добавляя к вашему .zshrc
autoload -z edit-command-line
zle -N edit-command-line
bindkey '^XE' edit-command-line # binds CTRL+X+E
bindkey "^X^E" edit-command-line # binds CTRL+X - CTRL+E
Используйте gedit -
. Таким образом, это будет читать из stdin, таким образом, можно будет использовать
echo 'echo "complex command"'|gedit -
или просто
gedit - <<< 'echo "complex command"'
Этот способ, которым Вы не должны будете создавать отдельный tmpfile.
С этой командой можно достигнуть этого: echo "This is a complex command" > tempfile | gedit tempfile
.
Редактирование:
Насколько я понимаю, Вы хотите что-то вроде этого: echo echo "This is a complex command" > tempfile | gedit tempfile
. Например, echo ls -d > tempfile | gedit tempfile
откроет gedit файл со следующим текстом: "ls-d".
, Который сказал, что я буду совет против редактирования команд на Gedit. Терминал Linux чрезвычайно мощен (у нас есть мощное заполнение клавишей Tab).