#! /bin/bash
error_text=$(tail -n +1 /path/dir/folder/exc/a/update/Abd/ER/* | \
grep 'Warning\|Loaded\|Event')
echo $error_text
nc 10.10.99.45 25 << EOF
ehlo mail.abc.pvt
mail from: [email protected]
rcpt to: [email protected]
data
subject: errors
$error_text
.
quit
EOF
mv Abc*.err /path/dir/folder/exc/a/update/Abd/ER/BkError/
私が得るエラーは次のとおりです。
mv: cannot stat `ACQ*.err': No such file or directory
ベストアンサー1
ワイルドカードを使用してプログラムを呼び出すと、使用中のシェルはワイルドカードを拡張し、拡張ファイル名を実行可能ファイルの引数として渡そうとします。拡張できない場合、シェルはプロセスにファイル名としてワイルドカード文字を提供します。
次のstrace
出力を参照してください(ファイルあり)。
user@host:~$ mv test* /tmp/
execve("/bin/mv", ["mv", "test", "test1", "test2", "test3", "/tmp"], [/* 19 vars */]) = 0
これで、次のものがstrace
出力されます(ワイルドカードと一致するファイルは存在しません)。
user@host:~$ mv test* /tmp/
execve("/bin/mv", ["mv", "test*", "/tmp/"], [/* 19 vars */]) = 0
ファイル移動を使用すると、mv
プログラムはmv
最初にファイルの状態を取得しようとします。これはシステムコールを介して行われますstat
(参考資料を参照man 2 stat
)。ファイル(またはあなたの場合は複数のファイル)の状態を収集できない場合は、プロセスをmv
続行できません。
2番目のケースでは、statシステムコールが失敗します。
lstat("test*", 0x7fff20d26490) = -1 ENOENT (No such file or directory)
長い話を短く:この文と一致するファイルはありませんACQ*.err
。