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)

次のように末尾を省略し、/必要MAIN_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)

関連情報