【问题标题】:Running a shell script from any (non-specific) directory从任何(非特定)目录运行 shell 脚本
【发布时间】:2016-03-27 17:21:05
【问题描述】:

所以我已经发现这个问题在这里问了几次,但我不太明白答案。

所以我在一个供多人使用的大型服务器上运行,所以目录有点不稳定,我在弄清楚我应该做什么时遇到了一些问题。

所以我想创建自己的脚本

做了以下事情

$ mkdir myscripts
$ cd myscripts
$ vim dirstatus.sh

在 dirstatus.sh 中我刚刚编写了一个简单的脚本,我更感兴趣的是使脚本可以从任何目录执行。

所以

#!/usr/bin/env sh
# My own script - Experimenting with Shell
# Setting path export
export PATH=$PATH:~/bin/myscripts
printf "The current directory is $(pwd) \n
Path of this script is $(PATH)"

后来我做了

$ chmod +x dirstatus.sh

当我在 myscripts 目录中执行 ./dirstatus.sh 时,它可以工作

但是,当我在任何其他目录甚至 myscripts 目录中执行 $ dirstatus

我收到以下错误

~ksh: dirstat: command not found

有什么解决办法吗?

【问题讨论】:

  • 您可以在~/.bashrc 中存储一个别名吗?
  • “当我在 myscripts 目录中执行 /dirstatus.sh 时,它可以工作”:不可能,这将始终在根目录执行 /dirstatus.sh
  • @DiegoTorresMilano 也许他只是忘记粘贴句号(或者他实际上将脚本放在了根目录中,但我对此表示怀疑)
  • @DiegoTorresMilano @jDo 是的,抱歉,这是一个拼写/格式错误。打算写的时候写./dirstatus.sh

标签: linux bash shell shebang


【解决方案1】:

问题在于包含 dirstatus.sh 文件的 myscripts 目录不在终端会话的路径中。假设您在 home 中创建了 myscripts 目录,您可以执行以下操作:

PATH=~/myscripts:$PATH

要使此更改适用于所有新的终端会话,您可以将上述内容添加到登录时加载的 ~/.profile 或 ~/.bash_profile 文件中。

【讨论】:

  • 这就是我迷路的地方因为这(如上所述)不是个人服务器,所以每当我连接到它时,我都会被放置在特定目录中,例如。 home/users/me 但是主目录对我来说超出了限制。因此,我不确定是否应该在我连接的地方创建一个新的 .bash_profile 文件或什么。
  • 一般来说,当你第一次登录服务器时,你的主目录就是你的主目录。您也可以运行 echo $HOME 来查看您的主目录的环境变量。
  • sh 不支持波浪号扩展(尽管 Bash 即使在 POSIX 模式下也支持它)。您应该使用$HOME 来实现可移植性。
  • @Jenos 好吧,我可以通过使用echo $HOME 来确认它是我连接的地方,但是当我执行 ls -la 时,没有 .bashrc .bash_profile .profile 或任何类似的东西存在。此外,即使我创建了一个,它仍然拒绝通过脚本位置中的 ./dirstatus.sh 在启动之外工作
  • @Rawrplus 创建配置文件后您是否登录到新会话?它只会在登录时加载,否则你必须运行source ~/.bash_profile
猜你喜欢
  • 2020-07-12
  • 2021-06-17
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多