Что является примером универсального сценария оболочки, который будет работать правильно в терминале, но не при двойном щелчке?

Мне бы очень хотелось понять основные причины, по которым некоторые скрипты работают из командной строки, а не при двойном щелчке.

Есть ли пример сценария, который делает что-то простое, например, выводит переменную или что-то в этом роде, которое воспроизводимо работает в командной строке, но затем не работает при двойном щелчке?

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

2 ответа

Самый простой пример:

  • создать файл "тест" и поставить

    #!/bin/bash
    echo "Hello World!"
    

    в этом

  • сделать его исполняемым с chmod 700 test
  • делать ./test в командной строке, и он будет выводить

    Hello world!
    

Из Наутилуса:

  • по умолчанию: двойной клик, и он откроется как текстовый файл
  • когда установлено "запускать текстовые файлы" из настроек Nautilus, оно будет мигать пару раз, а затем ничего не будет делать.

Но это намеренное поведение. Для Наутилуса вам нужно будет создать скрипт, который выдает "всплывающее окно" с текстом "Hello world!" в этом.

Пример:

#!/usr/bin/python
import os
os.system('zenity --info --text="Hello world!!"')

показал бы...

Кстати, это также работает из командной строки, когда у вас есть рабочий стол. На tty будет отображаться ошибка "Не удалось подключиться к Мир".

и исправить это сам в будущем

Я сомневаюсь, хотя есть что-то исправить. Выполнение в командной строке и выполнение в Nautilus - это две разные вещи.

Хорошо, я думаю, что у меня есть ответ... по крайней мере, это решает мою проблему, и по пути я наткнулся на это и думал, что вернусь и отправлю ответ.

Сценарии оболочки не имеют той же переменной $PATH, что и терминал. Я могу изменить это для целей сценария (в моем случае на примере ноутбука Jupyter), выполнив следующее:

#! /usr/bin/env sh
#this adds the location where jupyter command is found
export PATH="/home/username/anaconda3/bin:$PATH" 
jupyter notebook

и это сработает.

Кроме того, некоторым программам может понадобиться терминал для взаимодействия, чтобы вы могли сделать что-то вроде:

#! /usr/bin/env sh
#this adds the location where jupyter command is found
export PATH="/home/username/anaconda3/bin:$PATH" 
xterm -e "jupyter notebook" # brings up a terminal window

И это откроет окно терминала для отображения вывода и получения ввода.

Изменить: я изменил для полноты.

Другие вопросы по тегам