Это своего рода одна из тех вещей, которые, как я полагал, многие люди будут использовать много, но я не могу найти людей, которые писали об этом.Преобразование команды истории в сценарий оболочки
Я нахожу, что много раз я делаю много итераций в командной строке с одним слоем, и когда я в конечном итоге использую его или ожидаю, что буду использовать его в будущем или когда он станет громоздким для работы в одной строке, как правило, рекомендуется превратить однострочный шрифт в сценарий оболочки и придерживаться его где-то разумным и легкодоступным, например ~/bin
.
Это, очевидно, слишком громоздко, чтобы использовать какие-либо окольный способ, включающий текстовый редактор, чтобы получить это сделать, и это можно просто сделать это на оболочке, например, в Zsh набрав
echo "#!/usr/bin/env sh" > ~/bin/command_from_history_number_523.sh && echo !523 >> ~/bin/command_from_history_number_523.sh
с последующим прессованием Вкладка, чтобы ввести команду !523
rd и каким-то образом перевести ее в приемлемую строку для сохранения.
Это особенно громоздкое и имеет на минимуме три проблемы:
- Не работает в Баше, как это не завершает
!523
- Требует некоторые ручной осмотр и струнные анкерный
- требует слишком много печатать например, имя скрипта должно быть введено дважды
Так что, похоже, мне нужно сделать некоторые мета-скриптовые скрипты здесь.
Я думаю, что хорошее решение будет работать как в bash, так и в zsh, и, вероятно, это должно сработать, если принять два аргумента, целое число для номера команды history и имя для сценария оболочки, чтобы вырваться из жесткого каталога, который содержит это одна команда. Кроме того, в bash, кажется, что многострочные команды рассматриваются как отдельные команды, но я готов предположить, что мы заботимся только об одном слое, и я использую zsh в любом случае на этом этапе.
Препятствие здесь заключается в том, что я думаю, что я все еще буду запускать сценарии оболочки через bash даже при использовании zsh, поэтому он вряд ли сможет проанализировать файлы истории zsh. Возможно, мне придется сделать это в две отдельные программы.
Обновление: Я согласен с комментарием @Floris, что прямое использование команд нравится !! было бы полезно, хотя я не уверен, как это сделать. Предположим, у меня есть использование быть
mkscript command_number_24 !24
этого недостаточно, потому что mkscript
будет получать развернутые из содержимого 24-й команды. если 24-я команда содержит какие-либо файловые глобусы или что-то еще они уже были расширены. Это плохо, и я в основном хочу содержимое файла истории, то есть необработанную командную строку. Я думаю, это можно обойти, вручную применив эти ярлыки здесь. Или просто вверните его и просто возьмите целочисленный аргумент.
я не согласен с посылкой «Это, очевидно, слишком громоздки, чтобы использовать ... текстовый редактор». Когда фрагмент сценария должен стать многоразовым, мне нужно его пересмотреть, чтобы он обрабатывал аргументы и т. Д. Часто это означает улучшение обработки ошибок. Это то, что я делаю лучше всего в текстовом редакторе. Я использую механизм «редактирования истории» (vi-mode в 'bash' launching' vim') для редактирования сценария еще раз, сохраняя его в файле в ~/bin, а затем удаляя и сохраняя его из буфера (так что это не выполняются еще раз). Затем я смогу исправить скрипт; добавьте главный комментарий, который идентифицирует, что он делает и т. д. –
Просто, чтобы убедиться, что ваш вопрос ясен: вам нужен сценарий (назовем его 'mkscript'), который вызывается с помощью' makecript somename! 123', который создает «обертку» "для команды, которая является номером 123 в вашей истории. Я бы порекомендовал, чтобы '!' Мог быть включен только для того, чтобы вы могли набрать '!!' для последней команды и не должны вычислять номер истории. Вы можете проверить, является ли второй аргумент единственным целым или строкой, чтобы подтвердить используемый синтаксис. Это то, что вы имеете в виду? Я должен согласиться с наблюдением @JonathanLeffler, хотя ... – Floris
@JonathanLeffler Ваша точка верна, однако для меня вполне разумно также сделать это **, а затем перейти в текстовый редактор ** с помощью сценария оболочки shebang уже создан для меня и т. д. Флорис, да. –