【问题标题】:Bash script awkwardness with pwd带有密码的 Bash 脚本尴尬
【发布时间】:2013-09-24 00:49:34
【问题描述】:

我在使用 bash 脚本时遇到了一个奇怪的问题。这里是:

PWD=${pwd}
# several commands
cd /etc/nginx/sites-enabled/
# more commands
cd $PWD
# I expect that I returning to my directory, 
# but $PWD contains current dir - /etc/nginx/sites-enabled/

这种行为有点懒惰。 $PWD 存储命令,它计算当前目录并在我们调用$PWD 的那一刻返回它,但我想将字符串变量存储在其中。怎么做?

【问题讨论】:

  • 使用 bash,cd - 可以让您回到上一个目录。或者使用 pushd/popd。

标签: bash cd pwd


【解决方案1】:

PWD 是环境变量,更改目录时会更改。

为变量使用不同的名称,

例如:

MYPWD=${PWD}  #or MYPWD=$(pwd)
cd /etc/nginx/sites-enabled/
cd $MYPWD

【讨论】:

  • 把它作为一个文档问题放在这里。大约半个小时就解决了这个问题。
  • 最好为变量使用小写(或混合大小写)名称,以避免这样的冲突...
【解决方案2】:

试试:

PWD=`pwd`

或者:

PWD=$(pwd)

两个表达式都将执行pwd命令并将命令输出存储在shell变量PWD中。网络上有很多关于何时使用每种样式的讨论。我记得的一点是“$(cmd)”方法允许嵌套命令,例如

CURRENT_BASENAME=$(basename $(pwd))  

编辑 - 我突然想到 PWD 是一个内置的 shell 变量,它总是扩展到当前工作目录。

【讨论】:

  • 没有。我注意力很集中,没有提到 $PWD - 是一个系统变量,总是指向当前目录。 HPWD=$(pwd) 工作得很好。
  • 编辑时,您应该编辑以更正帖子,而不是使用编辑在帖子末尾发表评论。您应该解决此问题以避免投票。可能没有阅读完整答案的人会感到困惑。
【解决方案3】:

您可能还会发现 cd - 有用的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2013-11-02
    • 2018-11-24
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多