क्या रिमोट टर्मिनल तक पहुंचने से पहले एक कमांड निष्पादित करने का एक तरीका है
जब मैं यह आदेश दर्ज करता हूं:
bash
$> ssh user@server.com "ls"
Ls कमांड को दूरस्थ कंप्यूटर पर निष्पादित किया जाता है, लेकिन ssh क्विट करता है और मैं अपने दूरस्थ सत्र में जारी नहीं रख सकता।
क्या कनेक्शन रखने का एक तरीका है? कारण जो मैं यह पूछ रहा हूं वह यह है कि मैं दूरस्थ .bashrc फ़ाइल को संशोधित किए बिना ssh सत्र के लिए एक सेटअप बनाना चाहता हूं।
उत्तर:
उत्तर № 1 के लिए 1आप बैश की इनिट फाइल पर प्रोसेस सबसेंसेशन का उपयोग करके देख सकते हैं। नीचे दिए गए उदाहरण में, मैं एक फ़ंक्शन को परिभाषित करता हूं myfunc
:
myfunc () {
echo "Running myfunc"
}
जो मैं एक अच्छी तरह से बच एक लाइनर में बदल गूंज में <(...)
निर्माण प्रक्रिया के लिए निर्वाह के लिए --init-file
बैश का तर्क:
$ ssh -t localhost "bash --init-file <( echo "myfunc() { echo "Running myfunc" ; }" ) "
Password:
bash-3.2$ myfunc
Running myfunc
bash-3.2$ exit
ध्यान दें कि एक बार कनेक्ट होने के बाद, मेरी .bashrc
खट्टा नहीं है लेकिन myfunc
एक इंटरैक्टिव सत्र में परिभाषित और उचित रूप से प्रयोग करने योग्य है।
यह अधिक जटिल बैश कार्यों के लिए थोड़ा मुश्किल साबित हो सकता है, लेकिन यह काम करता है।
जवाब के लिए 2 № 2
मैं छद्म ट्टी के आवंटन को बाध्य करूंगा और उसके बाद बैश चलाऊंगा ls
आदेश:
syzdek@host1$ ssh -t host2.example.com "ls -l /dev/null; bash"
-rwxrwxrwx 1 root other 27 Apr 1 2005 /dev/null
bash-4.1$