如何获取当前工作目录?

Int*_*... 256 shell scripting bash directory

我想要一个将当前工作目录带到变量的脚本。需要目录的部分是这样的dir = pwd。它只是打印pwd如何将当前工作目录放入变量中?

ter*_*don 398

没有必要这样做,它已经一个变量中:

$ echo $PWD
/home/terdon
Run Code Online (Sandbox Code Playgroud)

PWD变量由 POSIX 定义,适用于所有符合 POSIX 的 shell:

残疾人士

由 shell 和 cd 实用程序设置。在 shell 中,值应从环境中初始化,如下所示。如果在执行时向环境中的shell传递了PWD的值,则该值为当前工作目录的绝对路径名,包括终止空字节在内不超过{PATH_MAX}个字节,并且该值不包含点或点-点的任何组件,则外壳应将 PWD 设置为来自环境的值。否则,如果执行时环境中的shell传递了一个PWD的值,该值是当前工作目录的绝对路径名,并且该值不包含点或点-点的任何组件,则它未指定 shell 是将 PWD 设置为来自环境的值,还是将 PWD 设置为由 pwd -P 输出的路径名。否则,sh 实用程序会将 PWD 设置为由 pwd -P 输出的路径名。在 PWD 设置为来自环境的值的情况下,该值可以包含引用符号链接类型文件的组件。在 PWD 设置为 pwd -P 输出的路径名的情况下,如果对当前工作目录或该目录的任何父目录没有足够的权限来确定该路径名是什么,则 PWD 的值为未指定。可以忽略对该变量的赋值。如果应用程序设置或取消设置 PWD 的值,则未指定 cd 和 pwd 实用程序的行为。在 PWD 设置为 pwd -P 输出的路径名的情况下,如果对当前工作目录或该目录的任何父目录没有足够的权限来确定该路径名是什么,则 PWD 的值为未指定。可以忽略对该变量的赋值。如果应用程序设置或取消设置 PWD 的值,则未指定 cd 和 pwd 实用程序的行为。在 PWD 设置为 pwd -P 输出的路径名的情况下,如果对当前工作目录或该目录的任何父目录没有足够的权限来确定该路径名是什么,则 PWD 的值为未指定。可以忽略对该变量的赋值。如果应用程序设置或取消设置 PWD 的值,则未指定 cd 和 pwd 实用程序的行为。


对于更一般的答案,将命令的输出保存在变量中的方法是将命令括在$()` `(反引号)中:

var=$(command)
Run Code Online (Sandbox Code Playgroud)

或者

var=`command`
Run Code Online (Sandbox Code Playgroud)

在这两者中,$()首选是因为它更容易构建复杂的命令,例如:

command0 $(command1 $(command2 $(command3)))
Run Code Online (Sandbox Code Playgroud)


Gov*_*las 39

dir=$(pwd)

与反引号方法相比,这更便携且更受欢迎。

使用$()允许您嵌套命令

例如: mech_pwd=$(pwd; echo in $(hostname))

  • 实际上,如果有的话,backtics 更易于移植,因为它们早于 `$()` 格式。可以想象,仍有一些机器运行不支持较新的 `$()` 表示法的 shell。虽然两者都是由 POSIX 定义的,但今天更喜欢使用 `$()`,因为它是一种更简洁的语法,并且可以以比反引号简单得多的方式嵌套 (`$(command1 $(command2))`)。 (10认同)

chr*_*hrk 11

您可以使用环境变量$PWD,也可以编写如下内容:

dir=`pwd`
Run Code Online (Sandbox Code Playgroud)


Ark*_*zyk 6

您需要使用命令替换将pwd命令的输出保存到变量中。命令替换可以使用反引号或美元字符。像这样:

$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja
Run Code Online (Sandbox Code Playgroud)