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.