リモート スクリプトから実行すると find が機能しない

リモート スクリプトから実行すると find が機能しない

スクリプトに次の行があります:

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コマンドライン引数にのみテストとアクションを適用します(男が見つけた; こちらもチェックこの答え

関連情報