如何使文件(例如 .sh 脚本)可执行,以便它可以从终端运行

Ziy*_*gov 356 command-line executable

我有一个 script.sh 文件,这个文件的类型是 shellscript 文件。我想将此文件作为应用程序/x 可执行文件。我怎样才能做到?

rɑː*_*dʒɑ 497

您可以将文件标记为可执行文件:

chmod +x filename.sh
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样执行它:

./filename.sh
Run Code Online (Sandbox Code Playgroud)

如果你想使用不同的命令来启动它,你可以添加一个别名:

gedit ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

在文件末尾添加:

alias <new name>='/home/<full path to script>/filename.sh'
Run Code Online (Sandbox Code Playgroud)

打开一个新的终端会话或source ~/.bashrc在您的终端中输入以进行申请。然后只需使用新名称即可启动脚本。

  • 为什么可执行文件是`./filename.sh` 而不仅仅是`filename.sh`? (2认同)
  • @user1993 一般情况下,使用 ./filename.sh 指定当前目录下的文件,使用 filename.sh 指定当前目录或 PATH 任意目录下的文件。第一次使用消除了访问哪个文件的任何不确定性。在这种情况下,您尝试仅通过输入文件名来使用 bash 或其他解释器执行脚本(凭借假定的“#!/bin/bash”作为脚本中的第一行)。此用法需要指定目录。或者,您可以尝试“bash filename.sh”,它似乎适用于未指定的目录。 (2认同)

Tim*_*Tim 52

有两种方法可以使文件可执行:

图形界面方法:

右键单击该文件并选择属性。转到权限选项卡,然后勾选框Execute: [ ] Allow executing file as programProgram: [ ] Allow this file to run as a program在 Thunar 的Nautilus中。

在此处输入图片说明

终端/命令方法:

您可以使用:

cd /to/my/required/directory

然后运行

chmod +x filename.extension

或者只是运行:

chmod +x /path/to/your/filename.extension

chmod 也有一些更高级的选项:

空格是为了表明它被拆分了: - rwx --- ---

第一组---是用户。第二个是组,最后一个是其他(任何其他人)

r 代表读取,w 代表写入,x 代表执行。

因此,要让每个人都可以阅读它,但只能执行 Group 和 User 读取和写入它(但由于某种原因不执行)将是:

-rw- rx- r-- 但这将被添加到命令中:

chmod +rw-rx-r-- /path/to/file.extension

chmod也可以在数量上做到这一点。它基于二进制(我认为,因为它是 1,2 和 4)

所以有这些数字:

由用户执行是100. 按组执行是010. 由其他人执行是001.

用户写入的是200. 按组写是020。别人写的是002

用户读取的是400. 按组阅读是040。别人读的是004.

然后将这些加在一起以获得所需的组合。

因此,为了让每个人都可以阅读它,但只有 Group 执行和 User 写入(但由于某种原因不执行)将是:

400 + 040 + 004010200

加起来为 600 + 050 + 004 = 654。

然后您可以运行该命令。

chmod +654 /path/to/file.extension 设置它。

要设置所有权限,您可以键入:

chmod +rwxrwxrwx /path/to/file.extension

或者(这有点容易写,但更难记住每一个):

chmod +777 /path/to/file.extension

最后,你可以这样做:

chmod -777 /path/to/file.extension

剥夺所有人的所有权限。

和:

chmod +300 /path/to/file.extension

为用户添加读写,不影响任何其他权限(例如执行权限)。

这个网站有一个非常有用的小网格复选框,你可以勾选你想要的选项,它给你命令:

在此处输入图片说明

然而,并非所有可能的组合都适合使用;使用的主要有以下几种:

755 -Owner拥有所有,Group并且Other可以读取和执行

700 -Owner拥有所有

644 -Owner可以读写,Group并且Other可以读取

600 -Owner可以读写

而且,如果您使用的是非平凡的用户组:

775 -Owner可以读写,Group并且Other可以读取

770 -Owner并且Group都有,并且Other可以读取和执行

750 -Owner拥有所有,并且Group可以读取和执行

664 -Owner并且Group可以读取和写入,并Other可以只是读

660 -Owner并且Group可以读取和写入

640 -Owner可以读写,Group可以读

777 和 666 很少使用,除了在 /tmp 中。

感谢ILMARI Karonen用于指出在通常使用的那些!


Lis*_*iso 8

跑:

chmod +x /path/to/file.sh
Run Code Online (Sandbox Code Playgroud)

要使其不可执行,请运行:

chmod -x /path/to/file.sh
Run Code Online (Sandbox Code Playgroud)

例如我创建了.sh文件:

vi tester12.sh
Run Code Online (Sandbox Code Playgroud)

在 vi 编辑器上写了一些代码后,我将从 vi 编辑器中退出:

:wq!
chmod +x tester12.sh
./tester12.sh
Run Code Online (Sandbox Code Playgroud)