sudo -u उपयोगकर्ता नाम -s "cmd arg" रिटर्न कमांड नहीं मिला


10

मैं कमांड निष्पादित करता था:

sudo -u elasticsearch -s "ulimit -Hn"

और यह ulimit का मान लौटा रहा था-जब तक कि मैंने इसे Ubuntu 11.10 पर आज़माया नहीं, तब तक उपयोगकर्ता इलास्टिक्सर्च द्वारा देखा गया। वहाँ यह रिटर्न:

/bin/bash: ulimit -Hn: command not found

मैंने कुछ अलग कमांड की कोशिश की, और जब मैं एक तर्क का उपयोग करता हूं तो मुझे हमेशा "कमांड नहीं मिला" मिलता है:

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

किसी भी विचार पर मैं उस आदेश को कैसे कार्यान्वित कर सकता हूं जिसके लिए तर्कों की आवश्यकता हो sudo?


क्यों -s? बस सामान्य शेल रखें और कमांड निष्पादित करने के लिए इसका उपयोग करें। इस तरह के रूप में sudo -u elasticsearch ls all.sh। यदि elasticsearchअनुपयोगी डिफ़ॉल्ट शेल है, तो वास्तविक कमांड -s bash से पहले उपयोग करें ।
Glglgl

जवाबों:


16

आपको दोहरे उद्धरण चिह्नों को हटाने की आवश्यकता है। यह "ulimit -Hn" नामक एक कमांड को सिंगल कमांड, स्पेस और सभी के रूप में चलाने की कोशिश कर रहा है। कमांड लाइन पर -sअंतिम sudoविकल्प होना चाहिए sudo, और $SHELL -cनिष्पादित करने के लिए सभी निम्न तर्क पारित किए जाते हैं ।

sudo -u elasticsearch -s ulimit -Hn

मुझे लगता है कि जिस तरह -sसे संसाधित किया गया है वह बदल गया है, क्योंकि वर्तमान तरीका आपको $SHELLकमांड लाइन पर भागने से रिक्त स्थान के साथ तर्क पारित करने की अनुमति देता है :

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

तर्क को संभालने की पुरानी पद्धति उस '/tmp/foo bar'तर्क को दो भागों में विभाजित कर देगी , जिससे कमांड टूट जाएगी।


आपने कहां परीक्षण किया कि यह कमांड को विभाजित नहीं करेगा ?
जरथुस्त्र १३

@Zarathustra पांच साल पहले था - मैं अब तक याद नहीं कर सकता। मैं सूडो सोर्स कोड इतिहास के माध्यम से खुदाई करने का सुझाव देता हूं - आपको व्यवहार बदलने पर खोजने में सक्षम होना चाहिए।
Camh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.