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

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

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

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

0
задан 28 January 2017 в 16:10

2 ответа

Самый легкий пример:

  • создают файл "тест" и помещают

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

    в нем

  • , делают это, исполняемый файл с chmod 700 test
  • делает ./test на командной строке, и он произведет

    Hello world!
    

От Наутилуса:

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

, Но это - предназначенное поведение. Для Наутилуса необходимо было бы создать сценарий, который делает "всплывающее окно" с текстом "Привет мир!" в нем.

Пример:

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

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

enter image description here

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

и фиксируют его самостоятельно в будущем

, я сомневаюсь, хотя существует что-то для фиксации. Выполнение в командной строке и выполнение в Наутилусе являются 2 разными вещами.

4
ответ дан 7 November 2019 в 02:17

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

Сценарии оболочки не имеют той же переменной $ 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

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

Редактировать: я изменил для полноты.

0
ответ дан 7 November 2019 в 02:17

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

Похожие вопросы: