bash 权限 - 未知问题

bash 权限 - 未知问题

奇怪的是,我在脚本内的目录中遇到了以下问题:

#!/usr/bin/env bash
MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

当我运行它时,我得到:

ls: cannot access /home/ec2-user/bitcoin/*/: No such file or directory

如果我在终端运行它一切都很好。

另外,我认为这可能是一个前置问题,所以我chmod 777 -r对目录进行了操作,但仍然没有任何结果。有什么想法如何修复它吗?

笔记

这是在 Amazon EC2 实例上。

答案1

由于尾随斜杠,该模式/home/ec2-user/bitcoin/*/扩展到该目录的子目录列表。 /home/ec2-user/bitcoin(除了名称以 a 开头的目录.被省略。)如果/home/ec2-user/bitcoin不包含任何子目录,则该模式不匹配任何内容,因此它保持不变。


旁白:不要chmod 777仅仅因为你不明白发生了什么就逃跑。这能解决的问题极少,但可能引起的问题却很多。这就像说“我看不到我认为的窗户所在的位置,所以我要在墙上钻一个洞。”

答案2

我认为部分问题在于您定义变量的方式。而不是这样写:

MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

我建议您省略尾随/fromMAIN_DIR并在需要时使用它,如下所示:

MAIN_DIR=/home/ec2-user/dir
LAST_DIR=$(ls -d -t ${MAIN_DIR}/*/ | head -1)

我怀疑这可以帮助您确定发生了什么。在没有看到里面的内容的情况dir下,bitcoin我无法提出任何更具体的建议。

作为一个风格问题,我还强烈建议您引用变量(及其值),以便值中的意外空格不会破坏您的代码:

MAIN_DIR='/home/ec2-user/dir'
LAST_DIR=$(ls -d -t "${MAIN_DIR}"/*/ | head -1)

相关内容