我真的很想了解为什么某些脚本在命令行下可以运行,但双击时却不行的根本原因。
是否有一个脚本示例,它可以执行一些简单的操作,例如回显变量或类似操作,它可以在命令行中重复工作,但双击时却无法工作?
要清楚的是,我的意思是它应该在两种情况下运行,但双击时它应该无法正确执行其任务,并且它应该在任何最近的 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
这将打开一个终端窗口来显示输出并接收输入。
编辑:我为了完整性而进行了更改。