एक लाइन का उपयोग करके sftp को कई कमांड कैसे भेजें


14

निम्नलिखित कमांड sftpएक लाइन का उपयोग करने के लिए एक कमांड भेजता है :

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home"

sftpएक लाइन का उपयोग करने के लिए कई लाइनें कैसे भेजें । उदाहरण के लिए, इसे प्राप्त करने के लिए कैरिज रिटर्न या कुछ और सम्मिलित करने का एक तरीका है:

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file"

यह विचार उस sftp -bविकल्प का उपयोग नहीं करने के लिए है जहाँ एक बाहरी फ़ाइल सूचीकरण कमांड भरी हुई है।

जवाबों:


12

यहां दिए गए स्ट्रिंग ( <<<) सिंटैक्स से आपने मेरे शेल का अनुमान लगाया है bash, इसलिए आप बैकस्लैश-एस्कैप्ड कैरेक्टर ( $'') के साथ स्ट्रिंग का भी उपयोग कर सकते हैं :

sftp -o PasswordAuthentication=no user@host <<< $'lcd /home\n cd /myhome\n get file'

पोर्टेबल विकल्प यहाँ है:

sftp -o PasswordAuthentication=no user@host <<END
lcd /home
cd /myhome
get file
END

1
<<<पहले zsh (हालांकि प्रेरित rc) द्वारा पेश किया गया था और बाद में ksh93 में जोड़ा गया और फिर बैश किया गया।
स्टीफन चेज़ेलस

धन्यवाद, @StephaneChazelas। मुझे वास्तव में अपने zshकौशल को मजबूत करने की आवश्यकता है ।
मैनटवर्क

8

-b/--batchfileउचित त्रुटि से निपटने के लिए विकल्प का उपयोग करें :

 printf '%s\n' 'lcd /home' 'cd /myhome' 'get file' | sftp -b - user@host

1
चर परिवर्तन का उपयोग करने के लिए ''
Radnaskela Samot

2

हां, आप अभी उपयोग कर सकते हैं echo -e

echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host

3
echoबहुत ही गैर-मानक है - echo -eहर जगह समान काम नहीं करता है, इसलिए आपको पहले जांच करनी होगी। वैकल्पिक रूप से, बस का उपयोग करें printfजो बहुत अधिक पोर्टेबल है और हर जगह समान काम करना चाहिए।
jw013

1

-bडिस्क पर बैच फ़ाइल लिखने से बचने के लिए विकल्प से बचने के लिए आवश्यक नहीं है । प्रक्रिया प्रतिस्थापन का उपयोग करके आप मक्खी पर बैच बना सकते हैं।

batch() {
  echo lcd /home
  echo cd /myhome
  echo get file
}

sftp -b <(batch) -o PasswordAuthentication=no user@host

0

देशी sftp कमांड का उपयोग करें

sftp -o PasswordAuthentication = कोई उपयोगकर्ता @ होस्ट: / होम / myhome / फ़ाइल नहीं


जो आपने नोटिस नहीं किया, वह था lcdऔर cdअलग-अलग चीजें करना। आपने अभी पथों को किसी ऐसी चीज़ में संयोजित किया है जो मौजूद नहीं होगी।
अंडरस्कोर_ड

0

Mybru, आप अपनी आज्ञाओं को ऐसे ही पाइप कर सकते हैं:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.