如何通过绝对路径运行 bash 脚本?

如何通过绝对路径运行 bash 脚本?

我有一个文件:

/Users/danylo.volokh/test/test_bash_script.sh

内容很简单:

#!/usr/bin/env bash
echo "-- print from script"

我在文件夹“danylo.volokh”中

该命令运行良好:

Danilos-MacBook-Pro:~ danylo.volokh$ test/test_bash_script.sh 
-- print from script

但如果我尝试使用绝对路径运行,我会收到错误:

Danilos-MacBook-Pro:~ danylo.volokh$ /test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory

我想从任何文件夹运行具有绝对路径的命令并执行脚本。

答案1

我想从任何文件夹运行具有绝对路径的命令并执行脚本。

如果我尝试使用绝对路径运行,我会收到错误:

/test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory

文件/test/test_bash_script.sh不存在,因此无法执行。

  • 绝对路径定义为从根目录()指定文件或目录的位置/

  • /test不能是绝对路径,因为目录/test 不存在(它是您的主目录的子目录)。

您有两个选择:

  1. 使用正确的脚本绝对路径:

    /Users/danylo.volokh/test/test_bash_script.sh
    
  2. 使用基于您的主目录的路径:

    ~/test/test_bash_script.sh
    

什么是绝对路径?

绝对路径定义为从根目录()指定文件或目录的位置/

来源Linux/Unix 中的绝对路径与相对路径

由于斜杠总是将名称组件分开,因此如果路径名以斜杠开头,则假定无名“ROOT”目录为路径名的开头。ROOT 目录没有名称。它是整个 Unix 文件系统树的根。

以斜杠开头的路径名称为绝对路径名,因为它总是从 ROOT 开始。

由于难以谈论没有名称的目录,我们通常(错误地)使用名称“/”(斜杠)表示 ROOT 目录。这是错误的,因为路径名的名称组件不能包含斜杠,并且斜杠会分隔名称组件。请注意,当我们使用“/”表示 ROOT 时,我们实际上指的是“斜杠左侧的无名 ROOT 目录”,而不是斜杠本身。

来源Unix/Linux 路径名(绝对、相对、点、点点)

答案2

绝对路径是/Users/danylo.volokh/test/test_bash_script.sh,而不是/test/test_bash_script.sh。那么 Bash 就是正确的。

答案3

如果“这是您的完整绝对路径 /Users/danylo.volokh/test/test_bash_script.sh”,那么如果您在 Users 中,则执行路径将为“danylo.volokh/test/test_bash_script.sh”,否则如果您在 danylo.volokh 中,则执行路径将为“test/test_bash_script.sh”,否则如果您在测试中,则执行路径将为“./test_bash_script.sh”,否则如果您不知道自己身在何处,则执行路径将为“/Users/danylo.volokh/test/test_bash_script.sh”

这是为那些需要基本逻辑帮助的未来用户准备的,或者如果 op 仍然没有答案(那会很尴尬)

附言:这在 Linux 上应该可以完美运行,你可能需要对 Windows 进行一些修改

相关内容