Запустить файл в терминале с помощью сценария Nautilus в Linux

Нужно быстро прогнать .py, .sh или бинарник прямо из «Файлов» — без ручного открытия терминала и набора пути. Открываю gnome-terminal в папке файла: Python через python3, shell — через bash. После выполнения окно не закрываю.

Куда положить

Можно просто скачать скрипт Nautilus ниже и положить по этому пути. Скрипты Nautilus живут здесь:

bash
~/.local/share/nautilus/scripts/

В свойствах файла включаю «Исполняемый как приложение» — без этого пункта в меню не будет.

Или через командную строку

  1. Ставлю зависимости

    Нужны gnome-terminal и python3.

    bash
    sudo apt install -y gnome-terminal python3
  2. Создаю файл

    Имя файла — то, что будет в меню: Запустить в терминале.

    bash
    mkdir -p ~/.local/share/nautilus/scripts
    touch ~/.local/share/nautilus/scripts/"Запустить в терминале"
  3. Даю права на исполнение

    Без бита исполнения Nautilus скрипт не покажет.

    bash
    chmod +x ~/.local/share/nautilus/scripts/"Запустить в терминале"
  4. Открываю в редакторе

    xdg-open поднимает графический редактор, не nano.

    bash
    xdg-open ~/.local/share/nautilus/scripts/"Запустить в терминале"
  5. Вставляю код и пользуюсь

    Вставляю код ниже и пользуюсь: выделил файлы → ПКМ → «Сценарии». Чтобы меню подхватило файл:

    bash
    nautilus -q

Код

bash
#!/bin/bash

# Nautilus передаёт пути через переменную NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
    zenity --error --text="Выберите файл для запуска"
    exit 1
fi

# Берём первый выбранный файл
full_path=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | head -n1)
extension="${full_path##*.}"

# Проверяем существование файла
if [ ! -f "$full_path" ]; then
    zenity --error --text="Файл не существует: $full_path"
    exit 1
fi

# Проверяем права на исполнение только для бинарных файлов (не .py и не .sh)
if [ ! -x "$full_path" ] && [ "$extension" != "py" ] && [ "$extension" != "sh" ]; then
    zenity --error --text="Файл не имеет прав на исполнение. Выполните: chmod +x "$full_path""
    exit 1
fi

# Открываем терминал и запускаем файл
if [ "$extension" = "py" ]; then
    gnome-terminal -- bash -c "cd "$(dirname "$full_path")" && python3 "$full_path"; exec bash"
elif [ "$extension" = "sh" ] || [ -x "$full_path" ]; then
    gnome-terminal -- bash -c "cd "$(dirname "$full_path")" && bash "$full_path"; exec bash"
else
    gnome-terminal -- bash -c "cd "$(dirname "$full_path")" && "$full_path"; exec bash"
fi
← К списку статей

Поделиться

Комментарии

Пока нет комментариев — можете написать первый.

Оставить комментарий

Войти с помощью

или оставьте комментарий как гость

Отправка защищена сервисом Yandex SmartCaptcha. Подробности — в политике конфиденциальности.