Raspberry Piスパイカムバグを作成しようとしています。個々のプロセスごとに作成された新しいファイルが表示されるようにしようとしています
NOW=`date '+%F_%H:%M:%S'`;
良い結果。ただし、ファイルを更新せずに同じ問題でも$NOW
時間を更新するには、エコーが必要です。/home/pi/.bashrc
. ~/.bashrc
私が見つけたこのフォーラムでは効果があります:
#! /bin/bash
NOW=`date '+%F_%H:%M:%S'`;
filename="/home/pi/gets/$NOW.jpg"
raspistill -n -v -t 500 -o $NOW.jpg;
echo $filename;
raspistilの出力の前に引用符で囲まれているので、それがどのように機能するのかわかりません。
みんなありがとうございます! ! !
ベストアンサー1
するとき
NOW=`date '+%F_%H:%M:%S'`
またはより現代的な構文を使用して
NOW=$( date '+%F_%H:%M:%S' )
NOW
この変数は、この行が実行されるとコマンドの出力に設定されます。date
でこれを行うと、~/.bashrc
現在の$NOW
インタラクティブシェルセッションの開始時期を示すタイムスタンプが表示されます。
以下を使用して変数値を設定することもできます。
printf -v NOW '%(%F_%H:%M:%S)T' -1
bash
バージョン4.2以降を使用している場合。これにより、呼び出さずにタイムスタンプが変数に直接印刷されますdate
。
表示されるスクリプトでは、NOW
スクリプトの実行中に変数が設定されます(必要に応じて)。
割り当てるとき
filename="/home/pi/gets/$NOW.jpg"
実行後、シェルは文字列の変数を拡張します。二重引用符で囲んでも、これが行われます。 アポストロフィシェルが組み込み変数を拡張するのを防ぎます(これはいいえこの場合は何をしたいですか?)
filename
呼び出しで実際に変数を使用していないようなので、最後に出力したいraspistill
場合以外は、その値を設定する理由がわかりません。echo
コードの残りの部分では、$NOW
変数拡張(および$filename
)を二重引用符で囲む必要があります。これを行わずに、後で定義にNOW
スペースまたはワイルドカード(ファイル名ワイルドカードパターン)が含まれるように定義を変更すると、使用するコマンドが$NOW
そのコマンドラインを正しく解析できないことがあります。
たとえば、比較してみてください。
string="hello * there"
printf 'the string is "%s"\n' $string
そして
string="hello * there"
printf 'the string is "%s"\n' "$string"
関連事項:
コマンド置換のバックティック関連:* shシェルではバックティック(「cmd」など)は使用されなくなりましたか?
参照変数の拡張について:bash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスクそしてスペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?