foo.sh file.txt
ユーザーは、スクリプト内の特定のポイントで作成または上書きされたファイルパスを使用して自分のスクリプトを呼び出しますfoo.sh dir/file.txt
。
生成または上書きの動作は、ファイルを出力リダイレクト演算子の右側に配置するか、引数>
として渡す要件と非常によく似ていますtee
(実際の引数として渡すことは、tee
私が行うことです)。
スクリプトを開始する前に、ファイルを正しく確認したいと思います。できる実際に作成せずに生成/上書きされます。この検査は完璧である必要はありません。はい、スキャンと実際にファイルを作成する時点の間で状況が変わることがあることを知っています。しかし、ここでは大丈夫です。最大の努力ファイルパスが間違っている場合は、早期に終了できるようにソリューションを入力してください。
ファイルを生成できない理由の例:
- ファイルにディレクトリコンポーネントが含まれていますが、
dir/file.txt
ディレクトリはdir
存在しません。 - ユーザーに指定されたディレクトリ(またはディレクトリが指定されていない場合はCWD)に対する書き込み権限がありません。
はい、権限を「事前」として確認するのではないことを知っています。Unix Way™、むしろまず手術をしてみて許しを求めなければならなかったのに。しかし、私の特定のスクリプトでは、これはユーザーエクスペリエンスが悪く、担当コンポーネントを変更できませんでした。
ベストアンサー1
明らかなテストは次のとおりです。
if touch /path/to/file; then
: it can be created
fi
しかし、まだファイルがない場合は、実際にファイルを生成します。私たちはそれを自分でまとめることができます:
if touch /path/to/file; then
rm /path/to/file
fi
ただし、これにより不要な既存のファイルが削除されます。
しかし、我々はこの問題に対する解決策を持っています:
if mkdir /path/to/file; then
rmdir /path/to/file
fi
ディレクトリは、ディレクトリ内の他のオブジェクトと同じ名前を持つことはできません。ディレクトリを作成できますが、ファイルを作成できない状況は想像できません。このテストが完了すると、スクリプトはルーチンを自由に生成し、/path/to/file
必要な操作を実行できます。