如何从服务器上的任何位置执行 shell 脚本?

如何从服务器上的任何位置执行 shell 脚本?

所以基本上我有一个 JS 应用程序位于/var/lib/app/.为了启动这个节点应用程序,我startapp.sh从目录内部执行启动脚本。现在我需要它在启动时启动,因此我在 Ubuntu 服务器内部创建了一个 upstart 作业,/etc/init并给出了 , 的绝对路径startapp.sh,以在启动时触发。

但是每当我尝试执行任何触发的脚本时startup.sh,它都无法启动,因为它依赖于目录内的激活器文件来启动/var/lib/app/。我已经导出了 中的路径.bashrc,但仍然无法从 Ubuntu 服务器中除/var/lib/app/目录之外的任何位置执行该作业。

如何从服务器上的任何位置执行 shell 脚本?

答案1

您必须将/var/lib/app/目录添加到您的 PATH,而不是/var/lib/app/startapp.sh.

去做这个永久,首先输入以下命令查看您的 PATH 环境变量:

echo $PATH

您将得到的输出将类似于:

/usr/local/bin:/bin:/usr/bin/:usr/local/sbin:/usr/sbin/ ...

您不应该改变顺序,因此在导出时您应该PATH="$PATH:/..."使用附加到刚刚显示的先前原始路径的新路径。

通过或任何您喜欢的编辑器打开您的.bashrc(假设它是从~/.profileOSX 上调用的)并添加以下行:vi

export PATH="$PATH:/your/absolute/path"

你应该添加你的绝对路径,它意味着您的应用程序所在的目录,因此当您输入应用程序的文件名时,它就会被执行。例如,当您输入 时pwd,它从目录运行/bin/- 您可以在 PATH 环境变量中看到 - 因此脚本是/bin/pwd.要查看它,请输入which pwd您的 bash。我认为你的绝对路径是/var/lib/app/如果它下面没有目录并且你的应用程序在那里。

如果您做得正确,这将起作用,但如果没有,最简单的方法是将您编写的应用程序/var/lib/app//bin/.

$ cd /var/lib/app/
$ mv * /bin

答案2

要从存储可执行文件的文件中读取数据:

#!/bin/bash

old_dir="$(pwd)"
cd "$(dirname "$0")"
this_dir="$(pwd)"
cd "${old_dir}"
unset old_dir

# read from where executable is stored
echo "${this_dir}/data"
# read for present working directory
echo "$(pwd)"

相关内容