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

Dan*_*okh 6 linux bash shell command-line macos

我有一个文件:

/Users/danylo.volokh/test/test_bash_script.sh
Run Code Online (Sandbox Code Playgroud)

内容很简单:

#!/usr/bin/env bash
echo "-- print from script"
Run Code Online (Sandbox Code Playgroud)

我在文件夹“danylo.volokh”中

此命令运行良好:

Danilos-MacBook-Pro:~ danylo.volokh$ test/test_bash_script.sh 
-- print from script
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用绝对路径运行,则会出现错误:

Danilos-MacBook-Pro:~ danylo.volokh$ /test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ill 16

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

如果我尝试使用绝对路径运行,则会出现错误:

/test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

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

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

你有两个选择:

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

    /Users/danylo.volokh/test/test_bash_script.sh
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用基于您的主目录的路径:

    ~/test/test_bash_script.sh
    
    Run Code Online (Sandbox Code Playgroud)

什么是绝对路径?

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

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

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

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

因为没有名字的目录很难说,所以我们通常(错误地)为ROOT目录使用名字“/”(斜线)。这是错误的,因为路径名的名称组件不能包含斜杠和斜杠分隔名称组件。了解当我们使用“/”作为 ROOT 时,我们真正的意思是“斜线左侧的无名 ROOT 目录”,而不是斜线本身。

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