我认为问题的根源在于您并不真正了解终端仿真器和Shell之间的区别以及Linux如何弄清楚如何启动进程。
首先,有一个“终端仿真器”,在基于Gnome的环境中,通常是Gnome终端。
然后是“ Shell”,在Linux中通常是bash,尽管也可以使用其他shell。
“外壳”在“终端仿真器”中运行。这种区别来自物理终端的时代,在物理终端中,物理终端是用于接受输入,以彩色文字书写的硬件等,而Shell是用于处理用户命令并基于给定命令管理其他进程的软件。
如今,我们有一个可以显示任何图像的通用屏幕,因此我们不再使用物理终端,而是使用了“ Terminal Emulators”(一种可模拟物理终端的工作的软件)和Shell(仍然是与以前相同的ole'shell(嗯,现代shell确实利用了在软件终端仿真器中的优势,例如不受纸张的物理限制等,但仍然存在鸿沟)。
“外壳”并不总是在终端仿真器中运行;还有图形外壳,例如Nautilus(提示,Nautilus是具有大外壳的海洋生物的名称)或Windows Explorer(不要与Internet Explorer混淆)。
在命令行外壳(例如bash)和图形外壳(例如Nautilus)中,可执行文件都通过设置其execute
位来进行标记。
在命令行外壳中,您可以ls -l
用来查看文件的权限位,例如rwxrwxrwx意味着每个人都可以读取/写入/执行程序;rwxr-xr-表示所有者具有完全许可权,文件组中的人员可以读取和执行但不能写入,而其他人只能读取文件。在Nautilus中,您可以右键单击文件>属性>权限选项卡。在“权限属性”页面中,您可以类似于命令行外壳中的文件权限。
设置了执行位的文件被视为可执行文件,可以通过执行./filename(命令行外壳)或双击(图形外壳)来执行。
最后,关于Shell执行文件的方式还有其他一些微妙之处。在大多数Linux Shell中,您可以“执行”以python / perl / php / bash编写的脚本,该脚本不是已编译的可执行文件。由于这些文件不是本地编译的可执行文件,因此需要执行解释器(例如python解释器)。与Windows shell(Explorer)不同,Windows shell通过文件扩展名找出解释器来调用;Linux shell通过查看如下所示的“ hashbang”行找出正确的解释器
#!/usr/bin/python
当设置了文件的执行位并且文件具有此hashbang行时,shell将使用当前文件作为参数调用解释器/ usr / bin / python。
Nautilus还可以识别程序何时是命令行应用程序,并为您提供在终端中运行该应用程序的功能。双击可执行脚本时,Nautilus会询问您是否要在终端中运行它,不使用终端运行还是要在文本编辑器中编辑文件。