ファイルがbash行にある場合は、コマンドを実行します。
私が今やっていることは次のとおりです。
$ stat /last_dump.sql && mysql -D my_database < last_dump.sql
これは正しいことですか?
うまく動作しますが、統計レポートが出力されます。
File: '/last_db.sql'
Size: 42161 Blocks: 88 IO Block: 4096 regular file
Device: 26h/38d Inode: 108 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ me) Gid: ( 0/ me)
Access: 2016-06-08 08:07:15.886741191 +0000
Modify: 2016-06-08 08:07:06.218593606 +0000
Change: 2016-06-08 08:07:06.218593606 +0000
Birth: -
どうやってできるかいいえこの統計レポートを表示しますか?
答え1
ファイルテスト演算子を使用することもできます。
[[ -e ./last_dump.sql ]] && mysql -D my_database < ./last_dump.sql
これらの演算子の詳細については、ここで確認できます。ファイルテスト演算子
ただし、使用を好む場合は、stat
出力を次に送信できます/dev/null
。
stat ./last_dump.sql >/dev/null && mysql -D my_database < ./last_dump.sql
上記のコマンドは./
現在のディレクトリを意味します。また、エラーが発生してもstatが完全に静かになるようにするには、または(同じ結果として)を/dev/null
使用してエラーを移動することもできます。&>/dev/null
>/dev/null 2>&1
答え2
この呼び出しは、stat
ファイルの変更時間や権限などの基本的なシェルコマンドから取得できない情報を取得する場合にのみ役立ちます。ファイルが存在するかどうかをテストするには、このtest
コマンドを使用します[
。このコマンドはほとんどのシェルに組み込まれています。
if [ -e last_dump.sql ]; then mysql -D my_database < last_dump.sql; fi
test は、-e
指定されたファイルが存在するかどうかをテストします。ファイルは、壊れたシンボリックリンクを含む任意のタイプにすることができます。通常のファイル(通常のファイルへのシンボリックリンクを含む)のみが必要な場合-f
。
以下を使用するにはいくつかの理由があります[ … ]
。stat
stat
出力削除のみを呼び出すことは、ファイルが存在するかどうかをテストする難読化された方法です。コードを読む人(6ヶ月後など)を考えてみましょう。[ -e file ]
コードは単に「file
それが存在しますか?」と言いますが、呼び出しはstat
「ファイルのメタデータをください」と言い、コードが存在するかどうかをテストするのは単なる副作用です。[ … ]
標準コマンドですが、stat
すべてのUnixバリアントには存在せず、互換性のないコマンドラインオプションがあります。この特定のケースではコマンドラインオプションを使用しないため、それほど悪くはありません。stat
外部コマンドなので、遅くなります。
&&
「if」を意味するときもこの単語を使用しないでください。これも読みやすさがはるかに低いです。またset -e
、(プログラムが中断された場合はシェルに終了するように指示)、存在しない場合は[ -e last_dump.sql ] && mysql …
スクリプトを中断して実行し続けるため、非常に強力ではありません。last_dump.sql
if [ -e last_dump.sql ]; then …; fi