如何将“ls”的结果存储在变量中,并将 cd 存储到该变量中
How to store the result of ‘ls’ in a variable, and cd into that variable
我想将 ls 的结果存储在一个变量中,然后我想 cd 到那个变量中。
我有如下脚本。
Cd /home/dev/command
work_dir=$(ls -ltrd log$(date +%y%m%d)\* | tail -n 1)
echo $work_dir
cd “/home/dev/command/$work_dir”
它显示错误,比如没有这样的文件或目录
如何CD进入ls命令显示的目录
cd “/home/dev/command/$work_dir”
您使用的是 unicode “ U+201C
和 ” U+201D
左右双引号,它们在英文文本中使用,而不是普通的 " U+0022
引号。所以 bash 认为引号是目录名的一部分。
除了中提到的unicode引号外,我还要补充几点:
- 您似乎在
Cd /home/dev/command
中将 cd
命令大写了。也许您正在使用 Windows-based 环境(cygwin 或 WSL?)
- 您在
ls -ltrd log$(date +%y%m%d)\*
中转义了 *
,如果您的目录名称实际上以文字星号结尾,这将是正确的,但星号通常用作通配符以允许替换任何字符数。
- 很难正确解析
ls
的输出,如果您要求 ls -l
输出则更难,正如 Fravadona 在他们的评论中暗示的那样!
由于您似乎想要匹配特定模式的最新目录,我建议使用 UNIX shell 可以按修改日期本机排序,例如 zsh。
$ zsh
$ cd /home/dev/command
$ cd log$(date +%y%m%d)*(om[1])
更改到正确的目录后,这要求 zsh 更改到与通配符 log$(date +y%m%d)*
匹配的目录,按修改日期排序(最新的在前)和 (om)
,选择第一个(最新的)该列表中带有 [1]
.
的项目
我想将 ls 的结果存储在一个变量中,然后我想 cd 到那个变量中。
我有如下脚本。
Cd /home/dev/command
work_dir=$(ls -ltrd log$(date +%y%m%d)\* | tail -n 1)
echo $work_dir
cd “/home/dev/command/$work_dir”
它显示错误,比如没有这样的文件或目录
如何CD进入ls命令显示的目录
cd “/home/dev/command/$work_dir”
您使用的是 unicode “ U+201C
和 ” U+201D
左右双引号,它们在英文文本中使用,而不是普通的 " U+0022
引号。所以 bash 认为引号是目录名的一部分。
除了
- 您似乎在
Cd /home/dev/command
中将cd
命令大写了。也许您正在使用 Windows-based 环境(cygwin 或 WSL?) - 您在
ls -ltrd log$(date +%y%m%d)\*
中转义了*
,如果您的目录名称实际上以文字星号结尾,这将是正确的,但星号通常用作通配符以允许替换任何字符数。 - 很难正确解析
ls
的输出,如果您要求ls -l
输出则更难,正如 Fravadona 在他们的评论中暗示的那样!
由于您似乎想要匹配特定模式的最新目录,我建议使用 UNIX shell 可以按修改日期本机排序,例如 zsh。
$ zsh
$ cd /home/dev/command
$ cd log$(date +%y%m%d)*(om[1])
更改到正确的目录后,这要求 zsh 更改到与通配符 log$(date +y%m%d)*
匹配的目录,按修改日期排序(最新的在前)和 (om)
,选择第一个(最新的)该列表中带有 [1]
.