कमांड प्रॉम्प्ट से 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.