如何在不给出完整路径的情况下调用命令?

g3k*_*3k0 1 shell terminal ubuntu command

我在 下安装了一个文本编辑器/usr/share/my-editor/editor-executable

当我想在终端中启动编辑器时,我必须编写完整路径:

# /usr/share/my-editor/editor-executable file-to-open
Run Code Online (Sandbox Code Playgroud)

我会为编辑器创建一个命令,这样我就可以简单地数字:

# my-editor file-to-open
Run Code Online (Sandbox Code Playgroud)

我能怎么做?

who*_*oan 5

您无法启动可执行文件的原因是 shell 在PATH环境变量中定义的任何路径(现在已知的路径)中查找命令。您可以使用以下命令检查这些已知路径

echo $PATH
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,/usr/bin在那里定义了 以及其他路径。

无论如何,您可以通过多种方式获得您想要的东西。


请注意,当我使用~目录时,该命令仅对当前用户可用。

创建别名my-editor

当您想要运行在已知路径中找不到的命令时,这是我最喜欢的。这对你来说也是个好主意。bash您可以将别名放在中~/.bash_aliases

echo alias my-editor=/usr/share/my-editor/my-editor-executable >> ~/.bash_aliases
Run Code Online (Sandbox Code Playgroud)

在某些已知路径中创建指向文件的链接

这就是您完成此操作的方式,只是为了澄清,如果您在任何已知路径中创建了链接,它也会起作用。

ln -s /usr/share/my-editor/my-editor-executable /usr/bin/my-editor
Run Code Online (Sandbox Code Playgroud)

定义一个带有名称的函数my-editor

我认为由于您的需求,这太多了,但是否想尝试一下取决于您。它可用于其他目的。
您必须在 shell 读取的文件中定义它。例如~/.bashrcbash. Shell 文件调用。

cat >> ~/.bashrc << "EOF"
function my-editor() {
    /usr/share/my-editor/my-editor-executable "$@"
}
EOF
Run Code Online (Sandbox Code Playgroud)

添加/usr/share/my-editor/PATH

您可以向变量添加新路径PATH。在 Ubuntu 中,PATH通常会设置该变量/etc/environment,如果修改此文件,则所有用户都可以访问新路径。

但是,如果您想成为唯一有权访问新路径的人,则可以在个人shell 文件之一中进行设置。例如在bash~/.bashrcShell 文件调用。

echo 'export PATH="$PATH:/usr/share/my-editor/"' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

[ bash] 将命令输入到哈希表中

获得相同结果的一种独特方法bash是添加my-editor到 shellhash表中。同样,您必须将命令添加到bash( ~/.bashrc) 读取的某个文件中。

echo 'hash -p /usr/share/my-editor/my-editor-executable my-editor' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

将可执行文件移动到已知路径

最后,如果您不再需要当前目录中的文件( ),只需将其移动到已知路径my-editor-executable即可。

mv /usr/share/my-editor/my-editor-executable /usr/bin/my-editor
Run Code Online (Sandbox Code Playgroud)