LINUX.ORG.RU

Новый уровень менеджмента скриптов

 , , ,


0

2

Всегда досаждало держать скрипты в root(!) директории /usr/local/bin/. Мало того, что они действуют для всех пользователей, так и выгружать их туда и изменять надо под рутом, а любое действие под ним не самым лучшим образом сказывается на безопасности системы. Да и неудобно это.

Поэтому меня заинтерисовало как Luke Smith через

se

смотрел свои скрипты в каталоге .scripts. После этого я полез в его .bashrc и увидел там как он изменил переменную PATH, а позже посмотрел видел про fzf, где он всё доходчиво объяснил как достиг своего результата.

В его репозитории я не увидел se(), что разогрело интерес самому реализовать нечто похожее на менеджмент пользовательских скриптов, пока макет выглядит так:

Хочется описать посредством чего я бы хотел достичь поставленной цели:

  1. Количество аргументов "$#"
  2. Проверка значения аргумента case "$number" in
  3. Чтение с консоли посредством read VAR
  4. Проверка на исполняемость в данный момент if [ "$(type "$VAR" 2> /dev/null)" ]; then...
  5. Создание файла touch "$VAR"
  6. Внесение строки echo "#!/bin/bash # Можно вместо последних двух пунктов сделать шаблоны cp base-bash "$VAR" или cp base-perl "$VAR"
  7. Возможность запуска chmod +x "$VAR"
  8. Запуск в редакторе "$EDITOR" "$VAR"
  9. Чтение выхлопа fzf VAR="$(fzf)"
  10. Открытие скрипта через fzf fzf | xargs -r "$EDITOR"
  11. Вывод первых 10 строк head -n 10 "$VAR"
  12. Удаление rm "$VAR"
  13. Просмотр скриптов ls "$SCRIPT" | less
  14. Проверка существования директории if ! [ -d /path/directory/ ]; then...
  15. Создание директории mkdir -p "$VAR"
  16. Добавление новой переменной echo "export SCRIPT="$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':' | sed 's/:*$//')" >> ~/.zshrc
  17. Изменение существующей echo "export PATH="$PATH:$SCRIPT" >> ~/.zshrc

Если выполню все выше написанное собираюсь встроить во всё это дело git, что бы каждое исправление и поправка фиксировались локальным коммитом. Может быть заменю fzf на dmenu, а может как-то скрещу их. Если я изобретаю велосипед (что скорее всего так) предложите пожалуйста приложение с похожим функционалом. Отказываться от своей идеи я не буду, а постараюсь научиться на чужой реализации. Или можете указать на (концептуальные) ошибки / предложить функционал.



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

Не понял проблематики.

Скрипты для всех пользователей: /usr/local/bin
Скрипты для одного пользователя: ~/bin
Что-то среднее - как обычно через права доступа.

Что еще нужно?

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

Неудобно же писать vim ~/bin/(вспоминать название)<TAB><TAB>, а если такой скрипт уже есть? Открывается существующий, ты из него выходишь и снова думаешь. Одним словом это жутко всё неудобно

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

Скрипты для одного пользователя: ~/bin

Не красиво же, мусор в хомяке. Храню всё в $HOME/.local/bin. Плюс теперь ещё $HOME/Code/go/bin появился, ибо Go по дефолту всё в $GOHATH складывает.

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

а если такой скрипт уже есть?

Значит его не надо писать. Ты же даёшь скриптам осмысленные названия?

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

Неудобно же писать vim ~/bin/(вспоминать название)<TAB><TAB>, а если такой скрипт уже есть? Открывается существующий, ты из него выходишь и снова думаешь. Одним словом это жутко всё неудобно

Скрипты в состоянии разработки складываются в соотв. директорию. А в ~/bin - симлинки на стабильные версии скриптов (ну, или копии).

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

Скрипты для одного пользователя: ~/bin

Не красиво же, мусор в хомяке. Храню всё в $HOME/.local/bin. Плюс теперь ещё $HOME/Code/go/bin появился, ибо Go по дефолту всё в $GOHATH складывает.

Ну, я в целом тоже за .local. Но мне сильно не мешает, так как именно в хомяке не так много каталогов, уже привык.

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

В таких голых дистрах как Arch — нет

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