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