我有一个应用程序,可以在文件位置运行,如下所示:
-$ cd home/myApps/app
-$ ./run.sh
我想从终端的任何位置调用 run.sh,而无需完整路径,我尝试使用 alais 并将以下代码添加到 bashrc 文件中。
alias mylovleyapp=/home/myApps/app/run.sh
问题是每当我想使用 mylovleyapp 运行应用程序时,程序都会返回错误,因为 run.sh 依赖于 myApps 文件夹中的另一个文件
我怎样才能实现这个目标?
答案1
条条大路通罗马。
别名
如果您喜欢别名,您可以按如下方式操作:
alias mylovleyapp='(cd home/myApps/app && ./run.sh)'
括号(...)
使这两个命令在子 shell 中运行。因此,程序结束后,当前目录不会发生变化。
PATH 中的包装脚本
相反,您可以创建一个包装脚本并将其放在您搜索的文件夹中PATH
,例如~/.local/bin
,~/bin
如果您是唯一需要访问权限的用户,或者/usr/local/bin
所有用户都需要访问权限。然后,您只需键入脚本的名称即可启动该程序。
该脚本可以只是您通常启动程序时所做的事情:
#!/usr/bin/env bash
cd home/myApps/app
./run.sh
例如,将该脚本另存为~/.local/bin/mylovleyapp
。使脚本可执行,以便可以运行:
chmod +x ~/.local/bin/mylovleyapp
如果~/.local/bin
不存在,您必须创建它,然后注销并重新登录以将其自动包含在您的 中PATH
。从现在开始,只需mylovleyapp
在终端中输入即可运行您的应用程序。
答案2
因为楼主没有提供示例脚本,所以我打算自己写一个。它只做一件事。ls
在脚本目录中运行。
是的,我知道你可以不用
ls
。./
但是对于这个例子,我假装它是必需的,以演示使用脚本当前目录的脚本。
#!/usr/bin/env bash
ls ./
将该脚本保存在某处。我将其保存为/home/ubuntu/test/myscript
。使用 使其可执行chmod +x /home/ubuntu/test/myscript
。现在cd
到脚本所在的目录(例如cd /home/ubuntu/test
),并使用 运行该脚本./myscript
:
ubuntu@computer:~/test$ ./myscript
myscript someRandomFile
到目前为止一切顺利。但现在让我们从不同的目录运行它。在这个例子中,我将从根目录 ( /
) 运行它。
ubuntu@computer:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin dev home lib lib64 lost+found mnt proc run snap sys usr
boot etc init lib32 libx32 media opt root sbin srv tmp var
哎呀。我们希望它打印脚本位置的文件,而不是用户位置的文件。在我们找到解决方案之前,请考虑一下为什么它会这样做一会儿。答案很简单。./
是相对于用户的当前目录,而不是脚本目录。
为了从脚本内部获取脚本的目录,我们将查看这个 Stack Overflow 问题。
它的要点很简单:script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
将获取脚本的当前目录,并将其存储在变量中script_dir
。
让我们相应地更新脚本。我们的脚本现在是这样的:
#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"
让我们运行它,看看它是否有效:
ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile
成功了!即使您不在脚本所在的目录中,它也会打印脚本目录中的文件,我们完成了。总体思路很简单。在脚本中,./
指的是用户的目录。"$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
指的是脚本所在的目录。相应地更新您的脚本,它应该可以正常工作。
答案3
您需要将应用程序路径添加到 PATH 变量中。要临时执行此操作,请转到应用程序所在的目录,然后:
PATH=.:$PATH
现在您可以从任何地方调用您的应用,而无需输入其完整路径。如果您关闭终端,此设置将会丢失。
要永久设置它,您需要编辑 .bashrc 文件并将 :/home/myApps/app 添加到 PATH 末尾。保存新的 .bashrc 文件,然后:
source .bashrc
答案4
因此,您需要将工作目录更改为目标应用程序所在的目录,然后执行该应用程序,以便它可以找到依赖文件。
我认为您可以通过在别名中给出两个单独的命令来实现这一点:一个用于更改目录,另一个用于执行程序,用分号分隔。
因此你的.bashrc
补充内容应为:
alias mylovleyapp='cd /home/myApps/app; ./run.sh'
假设依赖文件在/home/myApps/app
...如果不是,那么您可以将工作目录更改为包含依赖文件的目录,然后使用绝对路径作为第二个组件运行该应用程序。