LINUX.ORG.RU

Поиск bash IDE

 , ,


0

1

Пишу на bash скрипт для бэкапа. Возникла необходимость (в ходе отладки) запускать на выполнение только отдельные строки скрипта, причём непоследовательные. Например несколько строк из начала, где объявлены переменные + кое-что из середины.

Нужен какой-то инструмент, умеющий это, приветствуется максимальная простота и быстрота установки и настройки.

Также хотелось бы, чтобы была возможность группировки строк. Например все строки с объявлением переменных объединить в группу 1. Часть строк из середины - в группу 2. Ещё часть - в 3.

И запускать потом две разных подпрограммы, одну состоящую из 1+2, вторую из 1+3.

В идеале ещё чтобы была возможность пошаговой отладки с просмотром значений в переменных, но это уже не так обязательно.

Пишу в vim, так что оптимально, если это будет выполнено в виде плагина под него.



Последнее исправление: D_Lans (всего исправлений: 1)

Если вдруг ты посмотришь в сторону Emacs, там это реализовано в shell-mode (из меню доступно например)

Deleted
()
Ответ на: комментарий от Deleted

Отечаю только за требования из первого абзаца ТС, дальше не знаю, т. к. сам не пробовал.

Deleted
()

поищи «bash ide» на свежем мясе, когда то проскальзывало

serg10etomarkov
()

Возникла необходимость (в ходе отладки) запускать на выполнение только отдельные строки скрипта, причём непоследовательные. Например несколько строк из начала, где объявлены переменные + кое-что из середины.
Пишу в vim

http://vim.1045645.n5.nabble.com/specifying-multiple-ranges-in-vim-td5151682....

:<полученный руками или при помощи плагина по ссылке range>w !bash


А для отладки есть некий bashdb.

AITap ★★★★★
()
Ответ на: комментарий от Deleted

Если вдруг ты посмотришь в сторону Emacs

У меня эта жизнь всего одна и я решил посвятить её vim :)

D_Lans
() автор топика
Ответ на: комментарий от AITap

:<полученный руками или при помощи плагина по ссылке range>w !bash

Благодарю, похоже это то, что нужно. Разве что надо будет осилить установку плагинов, слышал, для этого есть отдельные программы-управляторы.

А для отладки есть некий bashdb.

Судя по скриншотам, он страшен как российский прожиточный минимум.

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

Просто автор запускает его в страшных Emacs и DDD, сам по себе он похож на perl -d. Вроде бы.

AITap ★★★★★
()
Ответ на: комментарий от Eddy_Em

Если разбивать насовсем, то таким скриптом пользоваться неудобно.

Если разбивать временно, во время отладки, это также неудобно.

D_Lans
() автор топика
Ответ на: комментарий от Kor03d

У меня скрипт дёргает системные команды с параметрами, использует пайпы и в общем целиком укладывается в возможности bash.

Применение python в данном случае, (о чём я уже размышлял), избыточно и вообще не в тему, ибо код целиком будет состоять из нелаконичных конструкций os.subprocess(). Установка же соответствующих используемым мною программам модулей в python, сделает скрипт плохо переносимым и неработающим из коробки.

Да и давно уже хотел освоить bash, как-никак это эпичный язык, ещё наши деды с ним воевали на нём писали.

D_Lans
() автор топика
Ответ на: комментарий от AITap

http://vim.1045645.n5.nabble.com/specifying-multiple-ranges-in-vim-td5151682....
:<полученный руками или при помощи плагина по ссылке range>w !bash

Сейчас пытаюсь разобраться и кой-чего не догоняю.

Установил плагин к vim multiselect по ссылке, научился им мультивыделять. Но если после выделения нужных строк я пишу

:MSExecCmd !bash
то эти строки исполняются в баше, но при этом они замещаются результатами своей работы. То есть строки
echo 1
echo 2
echo 3

Превращаются в

1
2
3

Как избежать замещения и просто видеть результат работы в отдельном окне, как это происходит с простым вызовом?

:! ls -l

D_Lans
() автор топика

ну, раз уж ты решил посвятить свою жизнь Vim, то попробуй вставить в .vimrc этот кусок

function! ExtractLinesWithWord()
	let s:phrase = expand("<cword>")
	let s:tmpfile = tempname()
	execute "w " . s:tmpfile
	execute "botright sp " . s:tmpfile
	silent execute "v/" . s:phrase . "/d"
	execute "w " . s:tmpfile
endfunction
map <F8> :call ExtractLinesWithWord()<CR>
функция ExtractLinesWithWord() вешается на <F8>

Эта функция:
* выбирает <слово> под курсором,
* создает временный файл
* записывает текущий файл во временный
* открывает временный файл в отдельном окне и перемещает фокус
* удаляет в открытом окне все строки, где <слово> НЕ встречается
* сохраняет изменения во временном файле

Далее, помечаешь нужные тебе строки какой-нибудь уникальной меткой и можешь выбрать нажатием <F8> все такие строки.

Например, исходный файл:

a="Hello, " 	# var1 var2 var3
b="Linux" 	# var1
b="Bash" 	# var2
b="Vim" 	# var3
echo ${a}${b}! 	# var1 var2 var3
устанавливаешь курсор на «var2» и жмешь <F8>:
a="Hello, " 	# var1 var2 var3
b="Bash" 	# var2
echo ${a}${b}! 	# var1 var2 var3
если установить курсор на «var3» и нажать <F8>, получишь:
a="Hello, " 	# var1 var2 var3
b="Vim" 	# var3
echo ${a}${b}! 	# var1 var2 var3

Исходный файл не изменяется.

anonymous
()
Ответ на: комментарий от D_Lans

У меня эта жизнь всего одна и я решил посвятить её vim :)

Похвально

amazpyel ★★★
()
Ответ на: комментарий от anonymous

Поиском по "-x" находилось что-то не то. Пытался просмотреть вручную, но ближе к середине уснул.

D_Lans
() автор топика
Ответ на: комментарий от anonymous

Спасибо, твой код работает отлично. Объединил оба способа, с мультивыделением и твой.

Сначала мультивыделяю нужные линии с помощью плагина multline. Потом регуляркой

:MSExecCmd s/$/ #DBG_SNP_CRT1/gc
Вставляю в конец каждой строки нужные метки-комментарии.

Далее F8 и я во временном файле, состоящем только из указанных строк. Повесил на F9 и Alt+F9 запуск текущего файла с обычными и рут правами соответственно:

" execute current file in bash
map <F9> :! bash %<CR>
map <A-F9> :! sudo bash %<CR>

В планах ещё реализовать функцию для добавления, удаления меток из строки за одно нажатие с дополнением имени метки по <tab>, т.е. жмём например F10, вылазит командная строка vim, начинаем писать имя тега, жмём <tab>, тег вставляется полностью, <enter> - и вот он в конце строки. Alt+F10, например, удаление тега. CTRL+F10 - редактирование базы данных тегов. И т.д.

D_Lans
() автор топика
Ответ на: комментарий от tazhate

Судя по описанию, bacula это ultra-kill для моих целей. Если ты не согласен, поясни, что в ней есть такого для меня, хоум юзера полезного, что я не смогу реализовать на баше?

а башу оставь скрипты

А чем скрипт бекапа не скрипт?

D_Lans
() автор топика
Ответ на: комментарий от D_Lans
set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...]
...
xtrace
Same as -x.
...
-x
After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list.

Пример: http://ideone.com/jcupax

anonymous
()
Ответ на: комментарий от anonymous

Понятно, значит это мне stderr так всю консоль заспамил. Надо будет перенаправлять в файл.

D_Lans
() автор топика
Ответ на: комментарий от AITap

Спасибо, так всё в порядке, результат открывается в отдельном окне.

А где почитать объяснение работы с :w и без :w?

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

Без :w запускается описанная в :help !range конструкция («пропустить через фильтр»). С :w - описанная в :help :write_c («записать в команду»).

AITap ★★★★★
()
7 декабря 2012 г.

Смотрел сейчас темы по тегу vim, и случайно нашел в теме выше интересный плагин - https://github.com/thinca/vim-quickrun . По идее то что надо.

psh ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.