ファイル名の空白は「弱め」と呼ばれる問題です。しかし、これを防ぐ方法の詳細なリストがないようで、一般的な静的分析ツールは予防をサポートしていないようです。
このリストから私が欲しいいくつかの戦略を集めてくださいこれらのエラーを防ぐために。
前述のヒントで問題を解決できる場合は、提案を介して問題を解決できるように明示的に許可してください。基準はわずか2つ
- この戦略は、少なくともいくつかのケースでは問題を解決しました。
- 以前はまったく同じ戦略は言及されていませんでした。
私の最初の貢献は次のとおりです。
- コマンドラインツールを呼び出すときにファイル名を引用することを忘れないでください(許可されている場合)。特に、プログラムを通じてそのツールを参考にするときは、必ず引用してください。 (医師コード例
execute "commandlinetool -r '" <> filename <> "'"
) - 一部のコマンドラインツールは、ファイル名にスペースを含めてエラーを防ぐオプションを提供しています
-print0
。xargs -0
git-ls-files -z
源泉、ポイント2) - プログラミング時にコマンドライン引数の種類、順序、および数に注意し、これらのチェックが失敗した場合はすぐに失敗します。さらに、認識されたパラメータはエラーメッセージから名前と値のペアに渡されます。そうしないと、空白のあるパス名が複数の引数で「処理」され、混乱するエラーが発生する可能性があります。
make
スペースと一緒に使用するのは非常に複雑です(源泉)。- ファイル名にスペースを入力として使用してプログラムをテストし、名前にスペースを含むディレクトリでプログラムとそのテストコレクションを実行します。
答え1
ファイル名の空白は「弱め」と呼ばれる問題です。
まあ、歴史的にあなたは正しいですが、正直なところ、私はca。以来、ファイル名の空白の問題はありませんでした。 2001. あなたは正しい指摘をしました:
コマンドラインツールを呼び出すときにファイル名を引用することを忘れないでください(許可されている場合)。
常に許可されています。
特に、プログラムを通じてそのツールを参考にするときは、必ず引用してください。 (医師コード例
execute "commandlinetool -r '" <> filename <> "'"
)
確かに!私はこのガイドラインを非常に高く評価します。これは、本質的に、「整数を扱う場合はゼロであっても負であってもよいことを認める」と同じである。したがって、破損せずにすべての有効な入力を受け入れるソフトウェアを作成してください。ほとんどの人はこの作業を始めましたが、小さな個人的なプロジェクトではない限り、スクリプトが誤って実行することはほとんどありません。
一部のコマンドラインツールには、ファイル名にスペースを含めてエラーを防ぐオプションがあります。
はい。これは上記の「壊れたソフトウェアを書かないでください」という側面に属します。スペースはファイル名に有効な文字であり、1995年以降ほとんどのオペレーティングシステムで使用されてきました。あなたのプログラム/スクリプトがファイル名に現れることができないと仮定すると、あなたはそれを間違っていると思います。
私はほとんどの若い開発者がそのような家庭でさえしないと思います!
プログラミング時にコマンドライン引数の種類、順序、および数に注意し、これらのチェックが失敗した場合はすぐに失敗します。
これでこれが呼び出されます。防御プログラミング。多くの場合、これは良い考えですが、他の場合はランダムな点で失敗し、その失敗を上向きに反映してもかまいません。 「脳外科ロボットに接続できません」など、ボタンを押す人が一部の設定ファイルに無効な文字が含まれているため、失敗したことを知りたい理由はありません。
合理的なエラー処理は、私が知っているどのシェルスクリプト言語の利点でもありません。状況は他の言語よりも数十年遅れています(PythonにはC ++、Java、Rust、または...デフォルトでは、今日のほとんどの言語はzshまたはより悪いbashほど悪くはありませんが、通過可能な例外処理機能があります。クッシュ、チェス、...)
種類を参照してください
あなたは知ることができます:シェルスクリプト言語は通常、異なるタイプを互いに互換性のないものとして扱うのには不十分です。すべてをすべてに簡単に接続して正確であることを証明する必要があるため、これは意図的に設計されています。
したがって、おそらく言語は少なくとも一部タイプを確認するための概念とツールがより良いかもしれません(例えば、Python)しかし、私はこれについての経験はありません)。
スペースでmakeを使用することは非常に複雑です。
正しい。私はmakeが重要なソフトウェアサプライチェーン要素であるにもかかわらず、1990年代初頭以降に停滞してきたと思うことを除いて、ここに追加することはありません。残念ながら十分に頑丈ではありません。。
最近では独自のMakefileを書くことはほとんどありません。場合によっては、システムで生成されたコンパイラオプションとライブラリの場所を決定するために、事前ビルド構成システムが常に必要になることがあります。最近、ほとんどのシステムはMakefileよりも劣化が少ないビルドツールでサポートしています。はいninja
。他のCMake
いくつmeson
かのプリビルド構成フレームワークは、Makefileの代わりにすぐに利用可能な忍者ファイルの作成をサポートしています。だからそれをやってください。 (上記のツールを使用すると、空白のファイルでも動作するMakefileを作成できますが、これはそれほど信頼できません。私は個人的に車のLinuxディストリビューションの4時間ビルドが失敗することを目撃しました。私はMake変数に空白を挿入するための標準的な方法が削除されました。
ファイル名にスペースを入力として使用してプログラムをテストし、名前にスペースを含むディレクトリでプログラムとそのテストコレクションを実行します。
はい、しかし、繰り返しますが、これは「ファイル名にスペースが含まれていないと仮定しないでください。なぜそうするのですか?」など、これは単に「正常な開発」です。
したがって、戦略に関する私の主な見解は次のとおりです。
- 何をしても、ファイル名にスペースが表示されないと仮定しないでください。これは間違った仮定であり、あなたのキャリアにとって決して有効な仮定ではありません。
- 同じ仮定を持つツールを使用しないでください。