Что является примером универсального сценария оболочки, который будет работать правильно в терминале, но не при двойном щелчке?
Мне бы очень хотелось понять основные причины, по которым некоторые скрипты работают из командной строки, а не при двойном щелчке.
Есть ли пример сценария, который делает что-то простое, например, выводит переменную или что-то в этом роде, которое воспроизводимо работает в командной строке, но затем не работает при двойном щелчке?
Чтобы было ясно, я имею в виду, что он должен работать в обоих случаях, но при двойном щелчке он не сможет правильно выполнить свою задачу, и он должен делать это при любой недавней установке 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
И это откроет окно терминала для отображения вывода и получения ввода.
Изменить: я изменил для полноты.