কীভাবে কেবল বাশ এবং অন্য কিছু ব্যবহার করে কোনও ফাইল ডাউনলোড করবেন (কার্ল, উইজেট, পার্ল ইত্যাদি নেই)


40

আমি একটি ন্যূনতম হেডলেস * স্নো যা আছে নেই ফাইল ডাউনলোড (যেমন কোন কার্ল, wget হয়, ইত্যাদি) জন্য কোনো কমান্ড লাইন ইউটিলিটি। আমার কেবল বাশ আছে

আমি কীভাবে একটি ফাইল ডাউনলোড করতে পারি?

আদর্শভাবে, আমি এমন একটি সমাধান চাই যা * নিক্সের বিস্তৃত পরিসরে কাজ করবে।



আমি এখন মনে করতে পারছি না গাওক উপলব্ধ থাকলেও আমি যদি আপনার কাছে একটি গোক ভিত্তিক সমাধান দেখতে পছন্দ করি তবে :)
ক্রিস স্নো

উত্তর:


64

/dev/tcpসিউডো-ডিভাইস সক্ষম করে আপনার কাছে যদি 2.0 2.0 বা তার বেশি বাশ রয়েছে , আপনি ব্যাশ থেকে নিজেই একটি ফাইল ডাউনলোড করতে পারেন।

নিম্নলিখিত কোডটি সরাসরি ব্যাশ শেলের মধ্যে আটকান (কার্যকর করার জন্য আপনার কোনও ফাইল কোনও কোড সংরক্ষণ করার দরকার নেই):

function __wget() {
    : ${DEBUG:=0}
    local URL=$1
    local tag="Connection: close"
    local mark=0

    if [ -z "${URL}" ]; then
        printf "Usage: %s \"URL\" [e.g.: %s http://www.google.com/]" \
               "${FUNCNAME[0]}" "${FUNCNAME[0]}"
        return 1;
    fi
    read proto server path <<<$(echo ${URL//// })
    DOC=/${path// //}
    HOST=${server//:*}
    PORT=${server//*:}
    [[ x"${HOST}" == x"${PORT}" ]] && PORT=80
    [[ $DEBUG -eq 1 ]] && echo "HOST=$HOST"
    [[ $DEBUG -eq 1 ]] && echo "PORT=$PORT"
    [[ $DEBUG -eq 1 ]] && echo "DOC =$DOC"

    exec 3<>/dev/tcp/${HOST}/$PORT
    echo -en "GET ${DOC} HTTP/1.1\r\nHost: ${HOST}\r\n${tag}\r\n\r\n" >&3
    while read line; do
        [[ $mark -eq 1 ]] && echo $line
        if [[ "${line}" =~ "${tag}" ]]; then
            mark=1
        fi
    done <&3
    exec 3>&-
}

তারপরে আপনি এটি শেল থেকে নীচে হিসাবে এটি সম্পাদন করতে পারেন:

__wget http://example.iana.org/

সূত্র: মোরাকির উত্তর সাইগউইন কমান্ড লাইনের মাধ্যমে প্যাকেজ আপগ্রেড ও ইনস্টল করছে?

আপডেট: মন্তব্যে বর্ণিত হিসাবে, উপরে বর্ণিত পদ্ধতিটি সরল:

  • readইচ্ছা ব্যাকস্ল্যাশ এবং নেতৃস্থানীয় হোয়াইটস্পেস ট্র্যাশগুলি।
  • বশ খুব সহজেই NUL বাইট নিয়ে কাজ করতে পারে না তাই বাইনারি ফাইলগুলি বাইরে।
  • unquoted $lineউল্লিখিত glob হবে।

8
সুতরাং আপনি নিজের প্রশ্নটি যেমন জিজ্ঞাসা করেছিলেন ঠিক একই সময়ে উত্তর দিয়েছেন। এটি আপনার কাছে একটি আকর্ষণীয় টাইম মেশিন;)
মীর বার্গ

11
@ মীরবার্গ - আপনি যখন কোন প্রশ্ন জিজ্ঞাসা করবেন, তখন টিক বাক্সটি 'নিজের প্রশ্নের উত্তর দিন' - সন্ধান করুন
ক্রিস স্নো

@ ইস্টার্টআপ - আমি মনে করি না আপনি নিজের উত্তরটির পক্ষে ভোট দিতে পারবেন। আমি কোডটি ব্যাখ্যা করতে পারি? এখনো না! তবে এটি সাইগউইন নিয়ে কাজ করে।
ক্রিস তুষার

3
কেবল একটি নোট: এটি ব্যাশের কিছু কনফিগারেশন নিয়ে কাজ করবে না। আমি বিশ্বাস করি তাদের বাশ বিতরণের বাইরে ডেবিয়ান এই বৈশিষ্ট্যটি কনফিগার করে।

1
উরগ, যদিও এটি একটি দুর্দান্ত কৌশল, এটি খুব সহজেই দূষিত ডাউনলোডের কারণ হতে পারে। while readযেমন ট্র্যাশ ব্যাকস্ল্যাশ এবং শীর্ষস্থানীয় হোয়াইটস্পেস এবং বাশ NUL বাইটগুলি খুব সুন্দরভাবে ডিল করতে পারে না তাই বাইনারি ফাইলগুলি আউট। এবং উদ্বেগহীন বিশ্বব্যাপী $line... এইগুলির কোনোটাই আমি উত্তরে উল্লিখিত দেখছি না।
ইল্কাচ্চু

19

লিঙ্ক ব্যবহার করুন।

এটি বেশিরভাগ ইউনিক্স / লিনাক্সের পক্ষে সাধারণ।

lynx -dump http://www.google.com

-ডাম্প: স্টুডআউট এবং প্রস্থান করার জন্য প্রথম ফাইলটি ডাম্প করুন

man lynx

বা নেটকাট:

/usr/bin/printf 'GET / \n' | nc www.google.com 80

বা টেলনেট:

(echo 'GET /'; echo ""; sleep 1; ) | telnet www.google.com 80

5
ওপিতে "* নিক্স রয়েছে যার ফাইলগুলি ডাউনলোড করার জন্য কোনও কমান্ড লাইন ইউটিলিটিস নেই", তাই নিশ্চিতভাবে কোনও লিঙ্ক নেই।
সেলেদা

2
নোটটি lynx -sourceউইজেটের কাছাকাছি
স্টিভেন পেনি

আরে, সুতরাং এটি সত্যিই দেরি করা মন্তব্য তবে আপনি কীভাবে টেলনেট কমান্ডের আউটপুটটিকে কোনও ফাইলে সংরক্ষণ করবেন? ">" দিয়ে পুনঃনির্দেশ করা ফাইলের সামগ্রী এবং টেলনেট আউটপুট উভয়ই আউটপুট দেয় "93.184.216.34 চেষ্টা করা হচ্ছে ... www.example.com এর সাথে সংযুক্ত"। আমি এমন পরিস্থিতিতে আছি যেখানে আমি কেবল টেলনেট ব্যবহার করতে পারি, আমি চেষ্টা করছি কমপক্ষে ফ্রেমওয়ার্কগুলি দিয়ে সম্ভব একটি কারাগার জেল তৈরি করতে।
পিক্সেলোমার

10

ক্রিস স্নো উত্তর থেকে অভিযোজিত এটি বাইনারি স্থানান্তর ফাইলগুলিও পরিচালনা করতে পারে

function __curl() {
  read proto server path <<<$(echo ${1//// })
  DOC=/${path// //}
  HOST=${server//:*}
  PORT=${server//*:}
  [[ x"${HOST}" == x"${PORT}" ]] && PORT=80

  exec 3<>/dev/tcp/${HOST}/$PORT
  echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
  (while read line; do
   [[ "$line" == $'\r' ]] && break
  done && cat) <&3
  exec 3>&-
}
  • আমি && বিড়ালকে পড়তে পড়তে ভাঙ্গি
  • আমি HTTP 1.0 ব্যবহার করি সুতরাং কোনও সংযোগের জন্য অপেক্ষা / পাঠানোর দরকার নেই: বন্ধ করুন

আপনি বাইনারি ফাইলগুলি এর মতো পরীক্ষা করতে পারেন

ivs@acsfrlt-j8shv32:/mnt/r $ __curl http://www.google.com/favicon.ico > mine.ico
ivs@acsfrlt-j8shv32:/mnt/r $ curl http://www.google.com/favicon.ico > theirs.ico
ivs@acsfrlt-j8shv32:/mnt/r $ md5sum mine.ico theirs.ico
f3418a443e7d841097c714d69ec4bcb8  mine.ico
f3418a443e7d841097c714d69ec4bcb8  theirs.ico

এটি বাইনারি স্থানান্তর ফাইলগুলি পরিচালনা করবে না - এটি নাল বাইটে ব্যর্থ হবে।
ওয়াইল্ডকার্ড

@ উইল্ডকার্ড, আমি বুঝতে পারি না, আমি একটি বাইনারি ফাইল স্থানান্তর উদাহরণ (নাল বাইট সহ) দিয়ে সম্পাদনা করেছি, আপনি কী আমাকে অনুপস্থিত করতে পারেন?
131

2
@ উইল্ডকার্ড, হিহহ, হ্যাঁ মনে হচ্ছে এটির কাজ করা উচিত, যেহেতু এটি সহ প্রকৃত ফাইল ডেটা পড়ে cat। আমি নিশ্চিত নই যে এটি প্রতারণা করছে কিনা (যেহেতু এটি খাঁটি শেল নয়), বা একটি দুর্দান্ত সমাধান (যেহেতু catএকটি আদর্শ সরঞ্জাম, সর্বোপরি) if তবে @ ১৩১, আপনি কেন এখানে অন্যান্য সমাধানের চেয়ে আরও ভাল কাজ করে সে সম্পর্কে একটি নোট যুক্ত করতে চাইবেন।
ilkkachu

@ উইল্ডকার্ড, আমি নিচের উত্তর হিসাবে খাঁটি বাশ সমাধানটি যুক্ত করেছি। এবং হ্যাঁ, প্রতারণা করুন বা না করুন, এটি একটি বৈধ সমাধান এবং একটি
উত্সাহের জন্য

7

" কেবল বাশ এবং অন্য কিছুই নয় " কঠোরভাবে গ্রহণ করা, এখানে পূর্বের উত্তরগুলির একটি রূপান্তর ( @ ক্রিস , @ 131 এর ) যা কোনও বাহ্যিক ইউটিলিটিগুলি (এমনকি মানকগুলি নয়) কল করে না তবে বাইনারি ফাইলগুলির সাথেও কাজ করে:

#!/bin/bash
download() {
  read proto server path <<< "${1//"/"/ }"
  DOC=/${path// //}
  HOST=${server//:*}
  PORT=${server//*:}
  [[ x"${HOST}" == x"${PORT}" ]] && PORT=80

  exec 3<>/dev/tcp/${HOST}/$PORT

  # send request
  echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3

  # read the header, it ends in a empty line (just CRLF)
  while IFS= read -r line ; do 
      [[ "$line" == $'\r' ]] && break
  done <&3

  # read the data
  nul='\0'
  while IFS= read -d '' -r x || { nul=""; [ -n "$x" ]; }; do 
      printf "%s$nul" "$x"
  done <&3
  exec 3>&-
}

সাথে ব্যবহার করুন download http://path/to/file > file

আমরা NUL বাইট সঙ্গে ডিল read -d ''। এটি এনএলইউ বাইট না হওয়া পর্যন্ত পড়ে এবং যদি এটি পাওয়া যায় তবে সত্যটি ফিরে আসে, যদি তা না পাওয়া যায় তবে তা মিথ্যা। বাশ স্ট্রিংগুলিতে NUL বাইটগুলি পরিচালনা করতে পারে না, সুতরাং যখন readসত্য দিয়ে ফিরে আসে, আমরা মুদ্রণের সময় ম্যানুয়ালি NUL বাইট যুক্ত করি এবং যখন এটি মিথ্যা ফিরে আসে, আমরা জানি যে কোনও NUL বাইট নেই আর এটি ডেটার শেষ টুকরো হওয়া উচিত ।

সঙ্গে মাঝখানে NULs সঙ্গে ফাইল ব্যাশ 4.4 সঙ্গে পরিক্ষিত এবং শূন্য, এক বা দুই NULs শেষ হওয়া, এবং এছাড়াও wgetএবং curlডেবিয়ান থেকে বাইনেরিতে। 373 কেবি wgetবাইনারি ডাউনলোড করতে প্রায় 5.7 সেকেন্ড সময় নিয়েছিল। প্রায় 65 কেবি / গুলি গতি বা 512 কেবি / সেকেন্ডের থেকে কিছুটা বেশি।

তুলনায়, @ 131 এর বিড়াল-দ্রবণটি 0.1 s এর কম বা প্রায় একশগুণ দ্রুত শেষ হয়। সত্যিই খুব অবাক হওয়ার কিছু নেই।

এটি স্পষ্টতই নির্বোধ, যেহেতু বাহ্যিক ইউটিলিটিগুলি ব্যবহার না করে, ডাউনলোড করা ফাইলের সাথে আমরা তেমন কিছু করতে পারি না, এমনকি এটি সম্পাদনযোগ্যও করে তুলি না।


প্রতিধ্বনিটি কি একক-শাঁস-বাইনারি নয়? (: পি)
131

1
@ 131, না! বাশ রয়েছে echoএবং printfবিল্টিন হিসাবে রয়েছে (এটি printfবাস্তবায়নের জন্য বিল্টিন প্রয়োজন printf -v)
ইলক্কাচু

4

আপনার যদি এই প্যাকেজটি থাকে libwww-perl

আপনি কেবল ব্যবহার করতে পারেন:

/usr/bin/GET

অন্যান্য উত্তরগুলি প্রশ্নের প্রয়োজনীয়তার সম্মান করে না তা বিবেচনা করে (কেবলমাত্র বাশ), আমি মনে করি এটি আসলে lynxসমাধানের চেয়ে ভাল , কারণ পার্ল অবশ্যই সেই লিংকটির পূর্বেই প্রতিষ্ঠিত হওয়ার সম্ভাবনা বেশি।
মার্কাস

4

পরিবর্তে আপনার স্থানীয় মেশিন থেকে এসএসএইচ এর মাধ্যমে আপলোডিং ব্যবহার করুন

একটি "ন্যূনতম শিরোনামহীন * নিক্স" বাক্সের অর্থ সম্ভবত আপনি এটিতে এসএসএইচ। সুতরাং আপনি এটিতে আপলোড করতে এসএসএইচ ব্যবহার করতে পারেন। যা আপনার ডাউনলোডহীন সার্ভারের কোনও স্ক্রিপ্টে কোনও স্ক্রিপ্টে অন্তর্ভুক্ত করার জন্য কোনও ডাউনলোড কমান্ড চান তা বাদে (সফ্টওয়্যার প্যাকেজ ইত্যাদির) ডাউনলোডের সমতুল্য ।

এই উত্তরে প্রদর্শিত হিসাবে , আপনি আপনার দূরবর্তী হেডলেস সার্ভারে একটি ফাইল স্থাপনের জন্য আপনার স্থানীয় মেশিনে নিম্নলিখিতগুলি সম্পাদন করবেন:

wget -O - http://example.com/file.zip | ssh user@host 'cat >/path/to/file.zip'

তৃতীয় মেশিন থেকে এসএসএইচের মাধ্যমে দ্রুত আপলোড করা

ডাউনলোডের তুলনায় উপরের সমাধানটির অসুবিধা হ'ল স্থানান্তর গতি কম, কারণ আপনার স্থানীয় মেশিনের সাথে সংযোগটি সাধারণত আপনার হেডলেস সার্ভার এবং অন্যান্য সার্ভারের সংযোগের তুলনায় অনেক কম ব্যান্ডউইথ থাকে has

এটি সমাধান করার জন্য, আপনি অবশ্যই উপরের কমান্ডটি শালীন ব্যান্ডউইথ দিয়ে অন্য সার্ভারে চালিত করতে পারেন। আরও আরামদায়ক করতে (তৃতীয় মেশিনে ম্যানুয়াল লগইন এড়ানো) আপনার স্থানীয় মেশিনে চালিত করার জন্য এখানে একটি আদেশ রয়েছে ।

সুরক্ষিত হওয়ার জন্য, শীর্ষস্থানীয় স্থানের অক্ষর সহ সেই আদেশটি অনুলিপি করুন এবং আটকান ' '। কারণে নীচের ব্যাখ্যা দেখুন।

 ssh user@intermediate-host "sshpass -f <(printf '%s\n' yourpassword) \
   ssh -T -e none \
     -o StrictHostKeyChecking=no \
     < <(wget -O - http://example.com/input-file.zip) \
     user@target-host \
     'cat >/path/to/output-file.zip' \
"

ব্যাখ্যা:

  • কমান্ডটি আপনার তৃতীয় মেশিনে ছড়িয়ে যাবে intermediate-host, সেখান থেকে কোনও ফাইল ডাউনলোড করা wgetশুরু করবে এবং target-hostএসএসএইচ এর মাধ্যমে আপলোড করা শুরু করবে । ডাউনলোডিং এবং আপলোড আপনার ব্যান্ডউইথ ব্যবহার করে intermediate-hostএবং একই সময়ে ঘটে (বাশ পাইপের সমতুল্যের কারণে), তাই অগ্রগতি দ্রুত হবে।

  • এটি ব্যবহার করার সময়, আপনাকে দুটি নিজস্ব সার্ভার লগইন ( user@*-host), টার্গেট হোস্ট পাসওয়ার্ড ( yourpassword), ডাউনলোড URL ( http://example.com/…) এবং আপনার টার্গেট হোস্টের আউটপুট পাথ /path/to/output-file.zipযথাযথ নিজস্ব মান সহ প্রতিস্থাপন করতে হবে ।

  • -T -e noneএসএসএইচ বিকল্পগুলির জন্য এটি ফাইল স্থানান্তর করতে ব্যবহার করার সময়, এই বিশদ বিবরণ দেখুন ।

  • এই কমান্ডটি এমন ক্ষেত্রে তৈরি করা হয়েছে যেখানে আপনি এসএসএইচ এর সর্বজনীন কী প্রমাণীকরণ প্রক্রিয়া ব্যবহার করতে পারবেন না - এটি এখনও কিছু অংশীদারি হোস্টিং সরবরাহকারীদের, বিশেষত হোস্ট ইউরোপের সাথে ঘটে । প্রক্রিয়াটি স্বয়ংক্রিয় করতে, আমরা sshpassকমান্ডটিতে পাসওয়ার্ড সরবরাহ করতে সক্ষম হতে নির্ভর করি । এটি sshpassআপনার মধ্যবর্তী হোস্টে ( sudo apt-get install sshpassউবুন্টুর অধীনে) ইনস্টল করা প্রয়োজন ।

  • আমরা sshpassএকটি নিরাপদ উপায়ে ব্যবহার করার চেষ্টা করি , তবে এটি এখনও এসএসএইচ পাবকি প্রক্রিয়াটির মতো সুরক্ষিত হবে না (বলা হয়েছে man sshpass)। বিশেষত, আমরা এসএসএইচ পাসওয়ার্ড কমান্ড লাইন আর্গুমেন্ট হিসাবে নয় তবে একটি ফাইলের মাধ্যমে সরবরাহ করি, যা ডিস্কে কখনও না উপস্থিত রয়েছে তা নিশ্চিত করার জন্য ব্যাশ প্রক্রিয়া বিকল্প দ্বারা প্রতিস্থাপন করা হয়। printfএকটি ব্যাশ বিল্ট-ইন, নিশ্চিত করুন কোড এই অংশ আলাদা কমান্ড হিসাবে পপ নেই আপে করছে psআউটপুট যে পাসওয়ার্ড [প্রকাশ করে দেবেন উৎস ]। আমি মনে করি যে এর ব্যবহারটি প্রস্তাবিত বৈকল্পিকের sshpassমতোই সুরক্ষিত , কারণ বাশ এটিকে যেমন কোনও ফাইল বর্ণনাকারীর অভ্যন্তরীণভাবে মানচিত্র করে । এবং এটি কোনও টেম্প ফাইল ( উত্স) ব্যবহার না করেইsshpass -d<file-descriptor>man sshpass/dev/fd/*]। তবে কোনও গ্যারান্টি নেই, সম্ভবত আমি কিছু উপেক্ষা করেছি।

  • পুনরায় sshpassব্যবহারটি নিরাপদ করতে, আমাদের স্থানীয় মেশিনে কমান্ডটি বাশ ইতিহাসে রেকর্ড করা থেকে রোধ করা উচিত। তার জন্য, পুরো কমান্ডটি একটি স্পেস ক্যারেক্টারের সাহায্যে সংশোধন করা হয়, যার এটির প্রভাব রয়েছে।

  • -o StrictHostKeyChecking=noঅংশ ক্ষেত্রে এটা লক্ষ্য হোস্টে সংযুক্ত কখনও ব্যর্থ থেকে কমান্ড বাধা দেয়। (সাধারণত, এসএসএইচ এর পরে সংযোগের চেষ্টাটি নিশ্চিত করার জন্য ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করবে We

  • sshpassকোনও sshবা scpআদেশকে তার শেষ যুক্তি হিসাবে প্রত্যাশা করে । সুতরাং আমরা সাধারণত পুনর্লিখন করতে হবে wget -O - … | ssh …একটি ব্যাশ পাইপ ছাড়া একটি ফর্ম মধ্যে কমান্ড, যেমন ব্যাখ্যা করেছেন এখানে


3

@ ক্রিস স্নো রেসিপিটির উপর ভিত্তি করে। আমি কিছু উন্নতি করেছি:

  • HTTP স্কিম চেক (এটি কেবলমাত্র HTTP সমর্থন করে)
  • HTTP প্রতিক্রিয়া বৈধতা (প্রতিক্রিয়া স্থিতি রেখা চেক, এবং '\ r \ n' লাইন দ্বারা শিরোনাম এবং বডি বিভক্ত 'সংযোগ: বন্ধ' যা কখনও কখনও সত্য নয়)
  • নন -200 কোডে ব্যর্থ হয়েছে (ইন্টারনেটে ফাইলগুলি ডাউনলোড করা গুরুত্বপূর্ণ)

এখানে কোড:

function __wget() {
    : ${DEBUG:=0}
    local URL=$1
    local tag="Connection: close"

    if [ -z "${URL}" ]; then
        printf "Usage: %s \"URL\" [e.g.: %s http://www.google.com/]" \
               "${FUNCNAME[0]}" "${FUNCNAME[0]}"
        return 1;
    fi  
    read proto server path <<<$(echo ${URL//// })
    local SCHEME=${proto//:*}
    local PATH=/${path// //} 
    local HOST=${server//:*}
    local PORT=${server//*:}
    if [[ "$SCHEME" != "http" ]]; then
        printf "sorry, %s only support http\n" "${FUNCNAME[0]}"
        return 1
    fi  
    [[ x"${HOST}" == x"${PORT}" ]] && PORT=80
    [[ $DEBUG -eq 1 ]] && echo "SCHEME=$SCHEME" >&2
    [[ $DEBUG -eq 1 ]] && echo "HOST=$HOST" >&2
    [[ $DEBUG -eq 1 ]] && echo "PORT=$PORT" >&2
    [[ $DEBUG -eq 1 ]] && echo "PATH=$PATH" >&2

    exec 3<>/dev/tcp/${HOST}/$PORT
    if [ $? -ne 0 ]; then
        return $?
    fi  
    echo -en "GET ${PATH} HTTP/1.1\r\nHost: ${HOST}\r\n${tag}\r\n\r\n" >&3
    if [ $? -ne 0 ]; then
        return $?
    fi  
    # 0: at begin, before reading http response
    # 1: reading header
    # 2: reading body
    local state=0
    local num=0
    local code=0
    while read line; do
        num=$(($num + 1))
        # check http code
        if [ $state -eq 0 ]; then
            if [ $num -eq 1 ]; then
                if [[ $line =~ ^HTTP/1\.[01][[:space:]]([0-9]{3}).*$ ]]; then
                    code="${BASH_REMATCH[1]}"
                    if [[ "$code" != "200" ]]; then
                        printf "failed to wget '%s', code is not 200 (%s)\n" "$URL" "$code"
                        exec 3>&-
                        return 1
                    fi
                    state=1
                else
                    printf "invalid http response from '%s'" "$URL"
                    exec 3>&-
                    return 1
                fi
            fi
        elif [ $state -eq 1 ]; then
            if [[ "$line" == $'\r' ]]; then
                # found "\r\n"
                state=2
            fi
        elif [ $state -eq 2 ]; then
            # redirect body to stdout
            # TODO: any way to pipe data directly to stdout?
            echo "$line"
        fi
    done <&3
    exec 3>&-
}

দুর্দান্ত বর্ধন +1
ক্রিস তুষার

এটি কাজ করেছিল, তবে আমি একটি উদ্বেগের বিষয় খুঁজে পেয়েছি, যখন আমি এই স্ক্রিপ্টগুলি ব্যবহার করি, সমস্ত ডেটা শেষ হয়ে গেলে এটি কয়েক সেকেন্ড অপেক্ষা করে রাখে, @ ক্রিস স্নো জবাবের ক্ষেত্রে এই ঘটনাটি ঘটবে না, যে কেউ এটি ব্যাখ্যা করতে পারে?
zw963

এবং, এই উত্তর এ, echo -en "GET ${PATH} HTTP/1.1\r\nHost: ${HOST}\r\n${tag}\r\n\r\n" >&3, ${tag}সুনির্দিষ্ট করা নেই।
zw963

আমি tagপরিবর্তনটি সঠিক উত্তর সহ এই উত্তরটি সম্পাদনা করি , এটি এখন ভাল কাজ করে।
zw963

zsh নিয়ে কাজ করছেন না, __wget google.com দুঃখিত, কেবলমাত্র http / usr / bin / env: বাশ সমর্থন করুন: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
ভ্রকানসাগর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.