奇怪的是,我在脚本内的目录中遇到了以下问题:
#!/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)