有哪些通用 shell 脚本可以在终端中正确运行,但双击时却无法运行?

有哪些通用 shell 脚本可以在终端中正确运行,但双击时却无法运行?

我真的很想了解为什么某些脚本在命令行下可以运行,但双击时却不行的根本原因。

是否有一个脚本示例,它可以执行一些简单的操作,例如回显变量或类似操作,它可以在命令行中重复工作,但双击时却无法工作?

要清楚的是,我的意思是它应该在两种情况下运行,但双击时它应该无法正确执行其任务,并且它应该在任何最近的 Ubuntu 安装上都这样做。我希望通过能够重现这种行为,我可以理解它并在将来自己修复它。

答案1

最简单的例子:

  • 创建文件“测试”并放入

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

    在里面

  • 使其可执行chmod 700 test
  • 在命令行上执行./test它将输出

    Hello world!
    

来自 Nautilus:

  • 默认:双击它将作为文本文件打开
  • 当从 Nautilus 首选项设置为“运行文本文件”时,它会闪烁几次,然后什么也不做。

但这是预期的行为。对于 Nautilus,您需要创建一个脚本,弹出一个带有文本“Hello world!”的“弹出窗口”。

例子:

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

将会显示……

在此处输入图片描述

顺便说一句:如果您有桌面,这也可以用于命令行。在 tty 上它会显示错误“无法连接到 Mir”。

并在将来自行修复

不过我怀疑有什么需要修复。在命令行中执行和在 Nautilus 中执行是两码事。

答案2

好的,我想我找到答案了...至少这解决了我的问题,在这个过程中我偶然发现了这个问题并想回来发布一个答案。

Shell 脚本没有与终端相同的 $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

这将打开一个终端窗口来显示输出并接收输入。

编辑:我为了完整性而进行了更改。

相关内容