Комментарий стал слишком длинным, поэтому я публикую его как ответ. У меня возникли проблемы с тем, чтобы ответ Оливье работал, поэтому я подумал, что добавлю более подробные инструкции к его ответу на случай, если у других тоже возникнут проблемы (вся заслуга принадлежит ему, проголосуйте за него вместо/а также за меня ).
Создайте пакетный файл, содержащий
#!/bin/sh
socket=`xprop -root _NET_CURRENT_DESKTOP`
socket=${socket##* }
if [ "$socket" ]
then
if [ "$DISPLAY" ]
then
socket="${DISPLAY%.*}-$socket"
socket=${socket#*:}
else
socket="NODISPLAY-$socket"
fi
exec geany --socket-file "/tmp/geany_socket_$socket" "$@"
else
exec geany "$@"
fi
Поместите пакетный файл в каталог, включенный в PATH (см.https://stackoverflow.com/questions/14650070/how-to-execute-bash-script-from-any-location). Я предполагаю, что вы называете командный файл wgeany, в противном случае замените его в следующих инструкциях на то, что вы назвали.
Теперь мы хотим установить это как нашу программу по умолчанию для открытия текстовых файлов. К сожалению, его нет в списке, и, по крайней мере, в моей версии вы, к сожалению, не можете сделать собственный выбор.
Мы можем решить эту проблему, перейдя к ~/.local/share/applications
или /usr/share/applications
(, если один из них не существует/не работает/у вас нет разрешения для него, попробуйте другой )и создайте текстовый файл с именем wgeany.desktop, содержащий:
[Desktop Entry]
Name=wgeany
Comment=wgeany
Exec=wgeany %f
Type=Application
StartupNotify=false
Terminal=false
Categories=TextTools;
Name[en_US]=wgeany
Также вы можете включить строку, указывающую на правильный значок geany (Icon=path/icon.png
), но я не удосужился найти ее. Сохраните файл, и теперь ваш командный файл должен появиться в диалоговом окне открытия с помощью. (Вы можете установить его в качестве приложения по умолчанию для типа файла, например.txt, перейдя в свойства файла (этого типа ), затем на вкладку «Открыть с помощью» и установите wgeany в качестве приложения по умолчанию. там.
Спасибо также MaxWilliams, который помог мне решить эту проблему.
Ansible is an open-source software provisioning, configuration management, and application-deployment tool. It runs on many Unix-like systems, and can configure both Unix-like systems as well as Microsoft Windows. It includes its own declarative language to describe system configuration
(Из Википедии .)Домашняя страница (Github).
Есть несколько других в той же категории. Чтение о ansible должно дать вам словарный запас для поиска других и сравнения, если это необходимо. Никс — новый соперник. Некоторые говорят «сложнее, но, может быть, в самый раз». Шеф-повар также находится на месте происшествия.
Пример Ansible для имени хоста myhost
, модульapt
(заменить на yum
или что-то еще):
ansible -K -i myhost, -m apt -a "name=tcpdump,tmux state=present" --become myhost
Список «tcpdump,tmux» может быть расширен запятыми. (Тот факт, что имя хоста myhost
встречается дважды в строке команды -, потому что мы используем не фиксированный список хостов, а специальный -hoc, с запятой в конце.)
Это только поверхностно, Ansible имеет обширную коллекцию модулей .
Если вы просто хотите установить кучу пакетов, то простой -вкладыш может сделать что-то вроде:
sudo bash -c 'for package in "tmux" "htop" "gimp"; do apt install -y --no-upgrade "$package"; done'
Цикл не является строго обязательным, но без него, если apt не сможет найти какую-либо из программ в списке, он не сможет установить ни один из других пакетов. Это может произойти, например, если вы переключитесь на более новую версию своего дистрибутива, а более старые пакеты больше не будут находиться в репозиториях. Если вы предпочитаете все или ничего, используйте
sudo apt install -y --no-upgrade tmux htop gimp
Если вы также хотите сохранить свои конфигурации, поисковый запрос будет «dotfiles».Так называются конфигурации в Unix-подобных системах, поскольку они в основном начинаются с «.».
Быстрый и грязный способ сохранить их — просто скопировать каталог всех этих конфигураций в новую систему. Лучшим способом было бы поместить их под контроль версий с помощью таких инструментов, как git. Я использую комбинацию git, dotbot и рукописных скриптов для настройки своей системы.
Один момент, который отсутствует в обсуждении до сих пор, заключается в том, что apt
, как правило, не единственная система управления пакетами, необходимая для чего-либо, выходящего за рамки голых основ. Другими инструментами управления пакетами могут быть snap
, pip
, conda
, cargo
и многие другие. Это неявно рассматривается в ответе Алекса Стрэгиса. Ansible
содержит огромное количество модулей, включая модули для управления пакетами, кроме apt
, таких как snap
и pip
. Поскольку мой ответ сосредоточен на написании -вашего -собственного -сценария, я хотел бы остановиться на этом. Хорошо протестированный фреймворк, такой как Ansible
, как правило, предпочтительнее для большинства задач, но самостоятельно -написанный код дает преимущество с точки зрения гибкости, на мой взгляд.
Я написал небольшой код на Python, который должен показать, как может выглядеть такая структура.
#!/usr/bin/env python3
import os
import re
import sys
import subprocess
def read_package_list(path):
package_list=[]
try:
with open(os.path.realpath(path)) as f:
for line in f:
match = re.search(r'^(?!\s*$)(?!#)\w+',line)
if match:
package_list.append(match.group(0))
return package_list
except Exception as e:
print(e.message)
print(e.args)
sys.exit(1)
return package_list
def install_packages(command,package_list,err_log):
try:
with open(err_log,'w+') as f:
for p in package_list:
print('executing '+command+' '+str(p))
out=subprocess.run(command+' '+p,shell=True,stderr=f)
except Exception as e:
print(e.message)
print(e.args)
sys.exit(1)
def main():
args = sys.argv[1:]
package_list = read_package_list(args[1])
err_log=os.path.realpath(args[2])
install_packages(args[0],package_list,err_log)
if __name__ == '__main__':
main()
Основными компонентами являются функция для обработки списка пакетов, разделенных символами новой строки(read_package_list
)и функция для выполнения команды установщика в оболочке(install_packages
). Строки, содержащие только пробелы, и строки, начинающиеся с #
, игнорируются при чтении в списке пакетов. main
обрабатывает аргументы, которые могут быть заданы в командной строке как installer command
, packagefile
, errorlog
.
Ну, вы можете просто использовать любую команду установщика, которая вам нравится
./installerscript.py 'apt install --dry-run' myaptpackages.txt apt_err.log
./installerscript.py 'snap install' mysnaps.txt snap_err.log
./installerscript.py 'pip install --user' mypy.txt py_err.log
./installerscript.py 'git clone' repos.txt git_err.log
Это может быть полезно, если кто-то ведет список пакетов, которые должны обрабатываться одинаково. Когда такая структура существует, ее легко улучшить. Можно было бы, например,настроить способ ведения журнала процесса установки или настроить обработку аргументов командной строки. Другой аспект заключается в том, что сценарий, вероятно, не должен выполнять каждую команду от имени пользователя root (, если он запущен от имени пользователя root ), как это происходит сейчас.
Если вы устанавливаете программное обеспечение из командной строки, то выполнение
grep "^sudo apt install" ~/.bash_history > system-setup.sh
После завершения установки системы вы получите сценарий, который (после некоторого редактирования )можно повторно использовать для настройки свежеустановленной системы в следующий раз, когда он вам понадобится.