【问题标题】:pushd does not go into specified directorypushd 没有进入指定目录
【发布时间】:2017-07-27 08:13:38
【问题描述】:

我正在尝试使用 pushd 进入目录

 #!/bin/bash

 function cloneAll {
   [ -d ~/mapTrials ] || mkdir ~/mapTrials
   pushd '~/mapTrials/'
   echo $(pwd)
   popd
}

echo $(pwd) 为我提供了与我调用脚本相同的工作目录。

我在其他 SO 答案中读到 pushd 仅适用于子进程,并且我必须为其创建别名。我也这样做了。

我尝试执行诸如mkdir 之类的命令来查看它的创建位置。它是在我调用脚本的目录中创建的,而不是在pushd 中指定的目录中创建的。

我如何让它工作?如何进入 shell 脚本中的特定目录,然后在该目录中执行命令??

提前致谢。

【问题讨论】:

  • 如果目录 ~/mapTrials 不存在且无法创建pushd 可能会失败。 (可能的原因:缺少创建目录的权限。或 file ~/mapTrials 已经存在)实际上,pushd 打印了一个错误。但是,您可以检查 $? 以获取最后一个命令的结果。如果 pushd 失败,则它不是 0(在我的情况下为 1)。
  • 在过去,我们有如此奇怪的效果,因为我们使用 NFS(在具有 SGI/Irix 和 PC/Linux 服务器的异构网络中)偶尔无法保持挂载的网络目录同步。但这现在应该不再是问题了。
  • @Scheff 函数中的第一行确保目录始终存在

标签: bash shell directory pushd


【解决方案1】:

我猜我发现了错误:

pushd '~/MapTrial'

单引号(以及双引号)阻止~ 的扩展。将“蛇”移出,它应该可以工作。例如:

pushd ~/'MapTrial'

pushd ~/MapTrial

【讨论】:

  • 谢谢.. ~'/MapTrial' 没有工作,但推了~/MapTrial 没有任何报价工作
  • @leoOrion 你是对的。我以为我明白了...... - 这个引用真的很强大,但让我发疯(有时)。
  • @leoOrion 幸运的是,我回答了~/'MapTrial',这是我之前在 bash 中测试过的。
  • 当我尝试它时,它给了我没有目录存在错误
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2021-12-31
  • 2020-08-03
  • 2018-08-10
  • 1970-01-01
相关资源
最近更新 更多