使用 bash 在没有 cd 的情况下在文件上运行点斜杠 (./) 的别名

使用 bash 在没有 cd 的情况下在文件上运行点斜杠 (./) 的别名

我有一个这样的目录:

/home/user/Project/

Project在许多子目录内部和之后,我有一个ninja需要使用./ninja.换句话说:

/home/user/Project/sub1/sub2/sub3/ninja

当然,我可以直接cd进入Project并执行./ninja。但是,我正在编写一个别名来通过 bashrc 运行该命令。

alias runNinja = cd ~/Project/sub1/sub2/sub3 && ./ninja

我们可以用 1 个命令来完成吗?

alias runNinja = .~/Project/sub1/sub2/sub3/ninja

上面的显然不起作用,甚至这个

alias runNinja = ./home/user/Project/sub1/sub2/sub3/ninja

TL,DR:如何缩短别名以在目录中运行脚本?

答案1

只是附加.bashrc 中 $PATH 变量中的路径如下所示:

export PATH=$PATH:/home/user/Project/sub1/sub2/sub3

并从任何你想要的地方执行它,即使没有 ./

$ ninja

但当然你也可以设置别名

alias runNinja='/home/user/Project/sub1/sub2/sub3/ninja'

并从任何地方执行:

$ runNinja

如果您在运行时故意想要进入该目录(例如:如果您正在处理该目录或依赖项的任何文件作为输入/输出),则必须在 ~/.bashrc 文件或配置文件中编写如下所示的函数:

runNinja() { cd /home/user/Project/sub1/sub2/sub3 && ./ninja "$@" }

答案2

别名bash写在

alias ninja="$HOME/Project/sub1/sub2/sub3/ninja"

( 周围没有空格=)。

我还在$HOME这里使用了该变量,当定义别名时,该变量将扩展到您的主目录的路径。

使用 shell 函数代替:

ninja () {
    "$HOME/Project/sub1/sub2/sub3/ninja" "$@"
}

"$@"扩展到您可以在命令行上给出的任何参数。

如果你需要要将当前目录更改为$HOME/Project/sub1/sub2/sub3运行之前./ninja,您也可以在函数中执行此操作:

ninja () (
    cd "$HOME/Project/sub1/sub2/sub3" &&
    ./ninja "$@"
)

请注意,我将函数体放在子 shell 中 ( (...))。这意味着cd不会改变当前目录当前的shell,但只能在函数环境中使用。

你显然可以把它写成

ninja () {
    ( cd "$HOME/Project/sub1/sub2/sub3" && ./ninja "$@" )
}

和命令&&之间的命令确保将cdninja./ninja不是如果失败则执行cd

Shell 函数可以在您通常添加别名的任何地方(可能在~/.bashrc)中声明。

答案3

你是如此接近。然而,这.不是命令,它是文件名的一部分。

该文件.位于每个目录中,是一个目录,它与它所在的目录是同一目录。cd ././././././不会让你一无所获。$PWD../.././.都是同一个目录。

因此,要运行/home/user/Project/sub1/sub2/sub3/ninja你输入的命令/home/user/Project/sub1/sub2/sub3/ninja ,你需要创建别名
alias ninja="/home/user/Project/sub1/sub2/sub3/ninja"

相关内容