スクリプトに次の行があります:
find ~ Templates -maxdepth 0 -type d -empty
予想どおり、正常に動作します。ただし、スクリプトを samba 共有にコピーしてそこから実行すると ( bash myscript.sh
)、find
ディレクトリが見つかりません。
find: ‘Templates’: No such file or directory
$PATH 変数は同じですが、strace ではその理由も見つかりませんでした。
find がなぜこのように動作するのか知っている人はいますか? これはバグですか、それとも私がfind
コマンドを正しく使用していないのでしょうか?
Ubuntu 19.10とbash 5.0を使用
答え1
find: ‘Templates’: No such file or directory
テンプレートサブディレクトリがないため、このメッセージが表示されています
- いずれにせよ、スクリプトを実行している時点から
cd
または -スクリプトで言及されていないディレクトリに切り替えられた
これはすべてタイプミスで、 を意味していたのではないかと思います~/Templates
。いずれにしても、~
スクリプトでは ではなく を使用する必要があります"$HOME"
。その結果、パスは になります"$HOME/Templates"
。
答え2
「いいえ、Templates は '~' またはユーザーのホーム ディレクトリで検索しているディレクトリです」
find ~ -maxdepth 0 -type d -empty -name Templates
答え3
Samba には Linux と同じ環境変数があると考える根拠は何ですか?
検索するディレクトリへの実際の/完全なパスを使用します。~
これはディレクトリではなく、おそらく空です。そのため、find はTemplates
検索パターン ( find: ‘Templates’: No such file or directory
) ではなくパスとして扱います。
samba ディレクトリでシェルを起動して、それが何であるか確認できますか? ;$ pwd
を使用して環境全体を確認することもできます。$ set
Samba ブック変数の使用の章ホームディレクトリが%H
存在しないと表示されます~
。
小さな実験:
$ ls -l | grep -E '^d' # to show there is 1 directory (tmp), which is not empty but doesnt have `Templates`
drwxr-xr-x 2 user group 24576 Mar 16 16:16 tmp
$ find Templates -maxdepth 0 -type d -empty # as if <path> (`~`) was empty
find: Templates: No such file or directory
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
find: Templates: No such file or directory
空であるか~
(最初のfind ...
パスは「空」)、検索したパスに存在しませんTemplates
(2 番目find
)。
$ touch Templates
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
$ rm Templates; mkdir Templates
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
Templates
もし
テンプレートは、'~' またはユーザーのホームディレクトリで検索しているディレクトリです
それから
$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates
問題は解決するはずです。
-maxdepth 0
コマンドライン引数にのみテストとアクションを適用します(男が見つけた; こちらもチェックこの答え)