कमांड प्रॉम्प्ट से if-statement निष्पादित करना


19

बाश में मैं निम्नलिखित कर सकता हूं:

if [ -f /tmp/test.txt ]; then echo "true"; fi

हालाँकि, अगर मैं sudoसामने जोड़ देता हूं, तो यह काम नहीं करता है:

sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'

मैं इसे कैसे कारगर बना सकता हूं?



यह sudoकेवल testऔर / या केवल के लिए बेहतर अभ्यास है echo। पूरा ifबयान नहीं।
— जिप्पी

आपका मतलब है if sudo test? हाँ, यह बेहतर होगा। मैं इसके testबिना उपयोग नहीं कर सकता if, क्योंकि यह निकास कोड को अन्यथा सेट करता है।
— 1933 में m33lky

जवाबों:


15

sudoexecएक शेल दुभाषिया के माध्यम से नहीं, अपने तर्क का उपयोग करता है । इसलिए, यह वास्तविक द्विआधारी कार्यक्रमों तक सीमित है और शेल कार्यों, उपनामों या बिल्डिंस ( ifएक बिलिन है) का उपयोग नहीं कर सकता है। ध्यान दें कि -iऔर -sविकल्पों का उपयोग दिए गए आदेशों को एक लॉगिन या गैर-लॉगिन शेल में निष्पादित करने के लिए किया जा सकता है, क्रमशः (या सिर्फ शेल, अंतःक्रियात्मक रूप से; ध्यान दें कि आपको अर्धविराम से बचना होगा या कमांड को कोट करना होगा)।

$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y

इसलिए, यदि मैं उपयोग करता हूं -iया -s, अगर-स्टेटमेंट का सही मूल्यांकन किया जाएगा?
— m33lky

2
हां, जब तक यह उद्धृत किया गया है या ठीक से बच गया है। मेरा संपादन देखें।
— केविन

9

शेल के माध्यम से लाइन को एक स्ट्रिंग तर्क के रूप में कॉल करने का प्रयास करें।

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.