我有一个这样的目录:
/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 "$@" )
}
和命令&&
之间的命令确保将cd
ninja
./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"