如何在目录外执行兄弟脚本?

如何在目录外执行兄弟脚本?
$ ls -l
bin/
$ ls bin/
startup.sh shutdown.sh

我写了一个名为的脚本,restart.sh里面bin/看起来像

#!/bin/sh
sh ./shutdown.sh
sh ./startup.sh

现在bin/目录看起来像这样。

$ ls -l bin/
startup.sh shutdown.sh restart.sh

当我执行restart.sh内部时bin/它就起作用了。

当我执行restart.sh外部时bin/,它没有。

$ ls
bin/
$ ./bin/restart.sh
sh: ./shutdown.sh: No such file or directory
sh: ./startup.sh: No such file or directory
$ cd bin
$ ./restart.sh
I'm happy...

我怎样才能让它工作?

为什么要投反对票?这正常吗?

更新

我很感谢评论和回答。我已经知道.系统中的意思了。我必须为让人们感到困惑而道歉。我接受了答案,因为这正是我的问题所要理解的上下文。我应该问一些像我怎样才能让 shell 脚本知道它的路径..?

我为别人回答了这个问题。有很多搜索结果可以检测 shell 脚本中的实际位置。我在BASH 脚本如何找到自己的位置

#!/bin/sh
wd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $wd
sh $wd/shutdown.sh
sh $wd/startup.sh

答案1

当您输入时,会./scriptname.sh显示./“仅在该文件夹中查找 scriptname.sh”。

并且您正在执行此操作,但是 scriptname.sh 不存在的文件夹中,因此 shell 返回“没有此文件或目录”。

事实上,您的 restart.sh 脚本代表您调用 ./shutdown.sh 并没有什么区别,您仍然位于一个不存在 shutdown.sh 的文件夹中,因此 shell 找不到它。

您要么需要将目录添加到$PATH(一个包含 shell 始终搜索的文件夹列表的环境变量,例如export PATH=$PATH:/home/me/bin(重新启动后将无法继续)),要么需要更改要调用的脚本/home/me/bin/shutdown.sh,要么需要脚本cd /home/me/bin/并调用./shutdown.sh

相关内容