【问题标题】:Changing Directory in Bash Script在 Bash 脚本中更改目录
【发布时间】:2021-05-27 04:42:54
【问题描述】:

我正在尝试运行应该放在特定目录中的 bash 脚本。 问题是脚本不会进入最新的文件夹。

文件夹如下所示:

root@raspberry ~/jdownloader/logs # ls -lha
total 104K
drwxr-xr-x  9 root root 4.0K Nov 30 11:52 .
drwxr-xr-x 14 root root 4.0K Nov 30 11:52 ..
drwxr-xr-x  2 root root 4.0K Nov 30 11:18 1479843940152_Tue, Nov 22, 2016 20.45 +0100
drwxr-xr-x  2 root root 4.0K Nov 30 11:21 1480501204839_Wed, Nov 30, 2016 11.20 +0100
drwxr-xr-x  2 root root 4.0K Nov 30 11:22 1480501242752_Wed, Nov 30, 2016 11.20 +0100
drwxr-xr-x  2 root root 4.0K Nov 30 11:30 1480501308071_Wed, Nov 30, 2016 11.21 +0100
drwxr-xr-x  2 root root 4.0K Nov 30 11:56 1480503116574_Wed, Nov 30, 2016 11.51 +0100
drwxr-xr-x  3 root root  12K Nov 23 11:25 extracting
drwxr-xr-x  2 root root  64K Nov 30 11:22 updatehistory

我的脚本中的重要片段是:

#!/bin/bash
declare dir=/var/log/scriptlog/jdstate
declare dir2=~/jdownloader/logs
NewFolder=`ls -rt1 ~/jdownloader/logs -I extracting -I updatehistory | tail -1 > /var/log/scriptlog/jdstate/newfolder.log`
OutputNewFolder=`head $dir/newfolder.log -n 1`
cd\ "\"$dir2/$OutputeNewFolder\""

当我尝试运行脚本时,它会显示找不到目录的错误。
但是当我复制/粘贴它时,它会进入目录。
知道如何进入目录吗?

【问题讨论】:

  • 为什么cd后面有反斜杠?你为什么要转义双引号?
  • 我只是想在 cd 之后转义空格( ),但没有任何影响
  • 我认为你有太多的转义,你不希望文字引号作为你的一部分 cd 并且你不想逃避我不认为的空间。试试cd "$dir2/$OutputNewFolder"(另外,正确拼写OutputNewFolder——你还有一个额外的e)。另外,请参阅 U&L 网站上的 this related question
  • 感谢 Eric,我尝试了各种各样的东西,但忘记了最简单的尝试! :D

标签: linux bash


【解决方案1】:

对于每个人如何寻找答案:

这是我最新的代码 sn-p 非常适合我

#!/bin/bash
declare dir=/var/log/scriptlog/jdstate
declare dir2=~/jdownloader/logs
NewFolder=`ls -rt1 ~/jdownloader/logs -I extracting -I updatehistory |  tail -1 > /var/log/scriptlog/jdstate/newfolder.log`
OutputNewFolder=`head $dir/newfolder.log -n 1`
cd "$dir2/$OutputNewFolder"

我确信可以对最新文件夹进行改进,但 htis 只适合我

【讨论】:

  • 似乎是一种迂回的写法:OutputNewFolder=$( ls ... | tail -1)