LINUX.ORG.RU

Как сделать открывающийся терминал в пункте контекстного меню

 ,


1

1

Всем привет. Помогите, пожалуйста, сделать следующую вещь в Linux mint 18. Когда мы нажимаем на файл правой кнопкой мыши, то там в контекстном меню есть пункт меню scripts в котором есть наши скрипты, которые лежат в /home/user/.local/share/nemo/scripts Вопрос в том, что я хочу чтобы на момент выполнения такого скрипта открывалось окно терминала, я видел что там происходит, и по завершении оно закрывалось(или ждало нажатия кнопки).

Код скрипта, например, такой:

#!/bin/bash

gnome-terminal -e "
            for i in {0..999}
                do
                    echo '$i'
                done
"
На что он выдаёт ошибку „for“ (No such file or directory)

Что я тут делаю не так?



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

На что он выдаёт ошибку „for“ (No such file or directory)

Завернуть действие в отдельный скрипт?

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

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

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

Сделал вот так:

gnome-terminal -e "bash -c \"
            for i in {0..9}
                do
                    echo "$i"
                    echo 'i'
                done
read -n1 -r -p 'Press any key to continue...';
\"
"
Так работает, Но где echo «$i» вместо числа он выводит пустую строку

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg
#!/bin/sh
  if tty >/dev/null ; then
    echo "${0}" called with parms "${*}"
    echo ; echo 'Press Enter to continue...' ; read G
  else
    exec 2>/dev/null gnome-terminal \
      --disable-factory -x "${0}" "${@}"
  fi
#eof

Естественно, если собираешься пользоваться башизмами, поставь '#!/bin/bash'.
Можешь перед '-x' добавить --geometry, --title, --hide-menubar, etc.

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

Извини, не мог писать некоторое время. Если ещё актуально, то:
1) По косвенным признакам было видно, что скрипт запускается как и всякая обычная программа (файл с правами на исполнение), возможно с параметрами, а не каким-либо экзотическим способом.
2) В таком случае он либо наследует stdin вызывающего процесса, либо имеет специально для него вызывающим созданный (например, pipe, а чаще /dev/null), на псевдотерминалах что-либо запускают только если это крайне необходимо программы типа ssh или netcat/socat. Поэтому при первоначальном вызове утилита tty заканчивается с ненулевым кодом (строка 'not a tty' нас не интересует).
3) Далее вызываем gnome-terminal с '-x', который, в отличие от '-e' формирует командную строку из всех оставшихся параметров. В данном случае ${0} - имя самого скрипта, пригодное для его вызова (это справедливо для любого хоть сколько-нибудь POSIX-совместимого shell-а, если скрипт вызван по-человечески, см. п.1)). ${@} в кавычках разворачивается в точную копию переданных скрипту параметров (независимо от наличия/отсутствия разделителей или спецсимволов в любом из них). Таким образом получаем косвенно-рекурсивный вызов nemo - скрипт - gnome-terminal - скрипт.
4) Будучи вызванным из gnome-terminal, скрипт имеет в качестве stdin псевдотерминал, поэтому утилита tty заканчиваеся с нулевым кодом (её вывод нас опять-таки не интересует), и в этой части 'if' делаем, что и хотели.
5) Употребление exec при вызове gnome-terminal - экономия на спичках, без него будет то-же самое. Заворачивание его stderr в /dev/null, может, и не нужно, но gtk-программы валят туда не по делу кучу мусора, и у меня это почти на автомате. А вот способа заставить какой-либо эмулятор терминала завершиться с тем же кодом, что и запущенная в нём программа, я не знаю.

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