मेरे पास मेकफ़ाइल में निम्नलिखित है जो मेरे डेटाबेस को पुनर्निर्मित करने के उद्देश्य से आवश्यक है, यदि आवश्यक हो तो इसे नष्ट कर दें। यह काम नहीं करता।मेकफ़ाइल क्रियाओं में मैं शैल चर का उपयोग कैसे करूं?
.PHONY: rebuilddb
exists=$(psql postgres --tuples-only --no-align --command "SELECT 1 FROM pg_database WHERE datname='the_db'")
if [ $(exists) -eq 1 ]; then
dropdb the_db
fi
createdb -E UTF8 the_db
चल रहा है यह एक त्रुटि में परिणाम है:
$ make rebuilddb
exists=
if [ -eq 1 ]; then
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [rebuilddb_postgres] Error 2
क्यों यह गलत है? यह वैध बैश की तरह दिखता है जहां तक मैं बता सकता हूं? क्या मेकफ़ाइल में ऐसा करने पर मुझे विशेष विचार करना चाहिए?
अद्यतन:
जवाब मैं एक काम संस्करण पर पहुंचे उपयोग करना:
.PHONY: rebuilddb
exists=$$(psql postgres --tuples-only --no-align --command "SELECT 1 FROM pg_database WHERE datname='the_db'"); \
if [ "$$exists" == "1" ]; then \
dropdb the_db; \
fi;
createdb -E UTF8 the_db
रहे हैं कुछ और बारीकियों एक पंक्ति "जो चर्चा करने योग्य हैं: (पारंपरिक रूप से और पोर्टेबल) जो कुछ भी आप ** उसी खोल ** द्वारा निष्पादित करना चाहते हैं ** एक तार्किक _make_ लाइन पर होना चाहिए। तो 'अस्तित्व = ... 'और' अगर ... फाई को अर्धविराम और बैकस्लाश के साथ एक कमांड लाइन में बनाया जाना चाहिए, लेकिन 'बनाया गया ...' खुशी से नुस्खा में एक अलग दूसरे कमांड के रूप में रह सकता है। –
पाठक को: सुनिश्चित करें कि आपने अपने 'VAR =" foo "\' कथन – redolent
के अंत में '\' रखा है, "सभी में एक पंक्ति" को https में वर्णित '.ONESHELL: 'का उपयोग करके आराम किया जा सकता है: //www.gnu.org/software/make/manual/html_node/One-Shell.html#One-Shell – sdive