为什么 ~/USERNAME/bin/some_custom_command 不能按预期工作?

为什么 ~/USERNAME/bin/some_custom_command 不能按预期工作?

我读《Linux圣经第10版》,第 3 章:使用 shell,第 70 页。有提示部分:

如果要添加自己的命令或 shell 脚本,请将它们放在主目录中的 bin 目录中(例如对于名为 cn 的用户来说为 /home/cn/bin)。在某些 Linux 系统中,此目录会自动添加到您的路径中,但在其他 Linux 系统上您可能需要创建该目录或将其添加到您的 PATH 中。因此,只要您将该命令添加到具有执行权限的 bin 中,您只需在 shell 提示符下键入命令名称即可开始使用它。要使命令可供所有用户使用,请将它们添加到/usr/local/bin

我正在运行 Fedora Linux 35 工作站版并尝试创建我的自定义命令。我已经创建了〜/bin/kek.sh

#! /usr/bin/bash
echo "Kek"

并转到命令行,输入kek我的主目录。我有bash: kek: command not found...。之后我去了我的~/.bashrc并在文件末尾添加以下行

PATH=$PATH:~/home/bin/kek; export PATH;

然后返回到目录,进入kek并得到相同的bash: kek: command not found....我已经改变了.bashrcPATH 行到PATH=$PATH:~/home/bin; export PATH;,重新加载终端会话并始终得到相同的结果。

请解释一下,为什么它对我不起作用?如何创建自己的命令并使其仅通过名称即可访问?谢谢。

答案1

PATH变量向您的 shell 指示可执行文件可能存在的位置。因此,如果您将脚本放在kek.sh~/bin,那么您需要添加~/binPATH.但看来您已添加~/home/bin/kek到您的PATH替代品中。

另一个问题是脚本被命名为kek.sh,但是您尝试执行的命令是kek。您需要更改名称,kek.sh或者kek需要kek.sh按照命令运行。

放在#!/usr/bin/bash脚本的顶部(称为 shebang)向系统指示应该在脚本上使用什么解释器。据我所知,在末尾用 .sh 命名它不会影响 shell 执行脚本的方式,因此kek只要在之后有适当的解释器,简单地命名它就不会改变它的执行方式#!

相关内容