Scripting 巴什:有人能理解这句话的意思吗?

Scripting 巴什:有人能理解这句话的意思吗?,scripting,bash,Scripting,Bash,它是一个较大脚本文件的一部分,但出现在最开始的时候,就在#之后/bin/bash这似乎将shell的工作目录更改为脚本的存储目录。这样做可能是为了让脚本可以引用与自身相同目录中的其他内容 我以前使用过一个变体,location=$(dirname$0)。这不会更改目录,而是存储脚本的路径供以后使用dirname$0采用文件名(在本例中为$0或shell找到该文件的路径),并echo删除存储该文件的目录。将命令(或命令序列)包装在$()组合中会导致命令的输出(通过echo、df、cat等打印到屏幕

它是一个较大脚本文件的一部分,但出现在最开始的时候,就在#之后/bin/bash

这似乎将shell的工作目录更改为脚本的存储目录。这样做可能是为了让脚本可以引用与自身相同目录中的其他内容

我以前使用过一个变体,
location=$(dirname$0)
。这不会更改目录,而是存储脚本的路径供以后使用
dirname$0
采用文件名(在本例中为$0或shell找到该文件的路径),并
echo
删除存储该文件的目录。将命令(或命令序列)包装在
$()
组合中会导致命令的输出(通过
echo
df
cat
等打印到屏幕上的内容)使用
$()
替换该表达式。 例子:
variable=$(echo“test”)
变成
variable=“test”

与其他编程语言一样,
$()
可以嵌套。例如:
variable=$(echo$(echo“test”)
最内层的表达式将打印“test”,然后将其替换为最外层的echo的参数。然后将该回波的输出替换为存储在变量
中的值-第一个和第二个示例的结果相同。一个愚蠢的例子。但它是有效的


我能看到的
$(dirname$(readlink-f$0))
$(dirname$0)
之间唯一的不同是前者总是返回绝对路径。后者可以返回相对路径或绝对路径,具体取决于工作目录相对于脚本的位置。

这似乎会将shell的工作目录更改为存储脚本的目录。这样做可能是为了让脚本可以引用与自身相同目录中的其他内容

我以前使用过一个变体,
location=$(dirname$0)
。这不会更改目录,而是存储脚本的路径供以后使用
dirname$0
采用文件名(在本例中为$0或shell找到该文件的路径),并
echo
删除存储该文件的目录。将命令(或命令序列)包装在
$()
组合中会导致命令的输出(通过
echo
df
cat
等打印到屏幕上的内容)使用
$()
替换该表达式。 例子:
variable=$(echo“test”)
变成
variable=“test”

与其他编程语言一样,
$()
可以嵌套。例如:
variable=$(echo$(echo“test”)
最内层的表达式将打印“test”,然后将其替换为最外层的echo的参数。然后将该回波的输出替换为存储在变量
中的值-第一个和第二个示例的结果相同。一个愚蠢的例子。但它是有效的

我能看到的
$(dirname$(readlink-f$0))
$(dirname$0)
之间唯一的不同是前者总是返回绝对路径。后者可以返回相对路径或绝对路径,具体取决于工作目录相对于脚本的位置。

  • 该命令执行
    readlink-f$0
    ,它似乎返回一个路径
  • dirname
    采用该路径,并为您提供dirname
  • cd
    将目录更改为该目录名
  • $0
    是一个变量,按原样保存当前脚本的名称 调用
见:

  • man-readlink
  • man dirname
  • man cd
      • 该命令执行
        readlink-f$0
        ,它似乎返回一个路径
      • dirname
        采用该路径,并为您提供dirname
      • cd
        将目录更改为该目录名
      • $0
        是一个变量,按原样保存当前脚本的名称 调用
      见:

      • man-readlink
      • man dirname
      • man cd

      添加到@user606723:
      $0
      包含被调用脚本1的路径和/或文件名。
      readlink-f$0
      将使该路径成为绝对路径,并将解析此名称中的任何符号链接-包括中间目录和最终部分。从该部分
      dirname
      将仅返回目录部分

      这是为应用程序编写“启动脚本”的好方法。脚本可以从某个私有
      bin
      目录进行符号链接,并且脚本不假定应用程序的某个安装位置



      1有关
      $0
      内容的详细信息,如绝对值、非绝对值、是否包含路径等,取决于调用shell找到脚本的方式。这些评论说明了这一点

      添加到@user606723:
      $0
      包含被调用脚本1的路径和/或文件名。
      readlink-f$0
      将使该路径成为绝对路径,并将解析此名称中的任何符号链接-包括中间目录和最终部分。从该部分
      dirname
      将仅返回目录部分

      这是为应用程序编写“启动脚本”的好方法。脚本可以从某个私有
      bin
      目录进行符号链接,并且脚本不假定应用程序的某个安装位置


      1有关
      $0
      内容的详细信息,如绝对值、非绝对值、是否包含路径等,取决于调用shell找到脚本的方式。这些评论有助于阐明这一点
      cd $(dirname $(readlink -f $0))