URL থেকে বাশ স্ক্রিপ্ট কার্যকর করুন


182

বলুন আমার কাছে ইউআরএল "http://mywebsite.com/myscript.txt" এ একটি ফাইল রয়েছে যাতে স্ক্রিপ্ট রয়েছে:

#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"

এবং আমি এই স্ক্রিপ্টটি প্রথমে কোনও ফাইলে না সঞ্চয় করে চালাতে চাই। আমি এটা কিভাবে করবো?

এখন, আমি বাক্য গঠনটি দেখেছি:

bash < <(curl -s http://mywebsite.com/myscript.txt)

তবে এটি কোনও কাজ করে না বলে মনে হয় না যদি আমি কোনও ফাইলে সংরক্ষণ করে এবং পরে সম্পাদন করি। উদাহরণস্বরূপ রিডলাইন কাজ করে না, এবং আউটপুটটি কেবল:

$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!

একইভাবে, আমি চেষ্টা করেছি:

curl -s http://mywebsite.com/myscript.txt | bash -s --

একই ফলাফল সঙ্গে।

মূলত আমার মত একটি সমাধান ছিল:

timestamp=`date +%Y%m%d%H%M%S`
curl -s http://mywebsite.com/myscript.txt -o /tmp/.myscript.${timestamp}.tmp
bash /tmp/.myscript.${timestamp}.tmp
rm -f /tmp/.myscript.${timestamp}.tmp

তবে এটি নিবিড় বলে মনে হচ্ছে এবং আমি আরও মার্জিত সমাধান চাই।

আমি কোনও ইউআরএল থেকে শেল স্ক্রিপ্ট চালানো সম্পর্কিত সুরক্ষা সম্পর্কিত বিষয়গুলি সম্পর্কে সচেতন, তবে আসুন এখনই সেগুলি সমস্ত উপেক্ষা করুন।


3
যদি আপনি একটি অস্থায়ী ফাইল তৈরি শেষ করে থাকেন, তবে সম্ভবত mktempআপনার নিজের সমাধানটি ঘূর্ণায়মান করার পরিবর্তে ব্যবহার করা উচিত
হস্তুরকুন

cmd <<foo বেশিরভাগ শেলগুলিতে হেরডোক সিনট্যাক্স এবং সম্ভবত আপনি যা চান তা নয়।
ডায়েটবুদ্ধ

উত্তর:


217
source <(curl -s http://mywebsite.com/myscript.txt)

এটা করা উচিত। পর্যায়ক্রমে, আপনার উপর প্রাথমিক পুনর্নির্দেশটি ছেড়ে দিন, যা মানক ইনপুটকে পুনর্নির্দেশ করছে; bashপুনঃনির্দেশ ছাড়াই ঠিক জরিমানা চালানোর জন্য একটি ফাইল নাম নেয় এবং <(command)সিনট্যাক্স একটি পথ সরবরাহ করে।

bash <(curl -s http://mywebsite.com/myscript.txt)

যদি আপনি এর আউটপুট তাকান এটি আরও পরিষ্কার হতে পারে echo <(cat /dev/null)


ধন্যবাদ, এটি স্পষ্ট করে দিয়েছিল যে কি চলছে। শুধু কৌতূহলী, সেই প্রাথমিক পুনঃনির্দেশটি ব্যবহার করে কী লাভ? আমি জিজ্ঞাসা করছি কারণ আরভিএম ইনস্টলেশনের জন্য, তারা কমান্ডটি ব্যবহার করে: bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) শুধু কেন নয়: bash <(curl -s https://rvm.beginrescueend.com/install/rvm)
ত্রিস্তান

4
ছোট নোট: যদি উইজেট পাওয়া যায় তবে কার্ল না পাওয়া যায় (উদাহরণস্বরূপ স্টক উবুন্টু ডেস্কটপ সিস্টেমে), আপনি বিকল্পটি wget -q http://mywebsite.com/myscript.txt -O -নিতে পারেন curl -s http://mywebsite.com/myscript.txt)।
ডি কোয়েজি

5
সচেতন থাকুন যে আপনি আপনার স্ক্রিপ্টে কমান্ড লাইন আর্গুমেন্টগুলি পাস করতে পারবেন না। bash will_not_work foobar <(curl -s http://example.com/myscript.sh)আপনি যদি স্ক্রিপ্টটির মালিক হন তবে আপনি পরিবর্তনের মতো পরিবেশের পরিবর্তনগুলি ব্যবহার করতে পারেন: MYFLAG1=will_work bash MYFLAG2=foobar <(curl -s http://example.com/myscript.sh)এবং এটি এর মতো পাইপগুলির সাথেও কাজ করে: curl -s http://example.com/myscript.sh | MYFLAG1=will_work MYFLAG2=foobar bashঅবশ্যই এটি আপনার প্রয়োজন M 1 এবং $ 2 এর পরিবর্তে MYFLAG1 এবং MYFLAG2 ব্যবহার করুন
ব্রুনো ব্রোনোস্কি

3
$ Sudo দ্বারা ব্যাশ <(কার্ল -s XXX ) পেয়েছিলাম ত্রুটি: ব্যাশ: আপনার / dev / FD / 63: খারাপ ফাইল বর্ণনাকারী
জেক

2
প্রথম সমাধান (এক যে উত্স ব্যবহার করে) মোটেই কার্যকর হয়নি। দ্বিতীয়টি কিছুটা কাজ করেছে তবে এর সীমাবদ্ধতা রয়েছে। এটি একটি সাব-শেলের URL থেকে স্ক্রিপ্টটি সম্পাদন করছে uting আমার স্ক্রিপ্টে সংজ্ঞায়িত কিছু ফাংশন রয়েছে যা আমি পিতামাতায় ব্যবহার করতে চাই। তা অর্জন করার কি আছে? বা আমি ভাগ্য থেকে দূরে আছি এবং একমাত্র সমাধান হ'ল সেই স্ক্রিপ্টটি একটি অস্থায়ী ফাইলে অনুলিপি করা এবং তারপরে উত্সটি দেওয়া?
হর্ষ পান্ডে

86

এটি কিছু আর্গুমেন্ট (arg1 arg2) দিয়ে তা দূরবর্তী স্ক্রিপ্টটি কার্যকর করার উপায়:

curl -s http://server/path/script.sh | bash /dev/stdin arg1 arg2

2
এটি স্টাটি ব্রেক করে: st bash <(curl ... ) আপনি স্টিডিন ব্যবহার করেন তবে ব্যবহার করুন
ফ্লোরস

47

বাশ, বোর্ন শেল এবং মাছের জন্য:

curl -s http://server/path/script.sh | bash -s arg1 arg2

"-S" পতাকাটি স্টিডিন থেকে শেল পড়ার ব্যবস্থা করে।


1
এটি বেশিরভাগ শেলগুলিতে কাজ করা উচিত, যদিও গৃহীত উত্তরটি মাছের সাথে কাজ করে না ।
হোইজুই

16

ব্যবহার wget, যা সাধারণত ডিফল্ট সিস্টেম ইনস্টলেশন অংশ:

bash <(wget -qO- http://mywebsite.com/myscript.txt)

আরটিএফএম : gnu.org/software/wget/manual/wget.html । ||| -কি == --quiet == "উইজেটের আউটপুট বন্ধ করুন" " ||| -ও- == - আউটপুট-ডকুমেন্ট = - == '-' যদি ফাইল হিসাবে ব্যবহৃত হয়, দস্তাবেজগুলি স্ট্যান্ডার্ড আউটপুটে মুদ্রিত হবে।
amra


12

শুধু চেষ্টা করুন:

bash <(curl -s http://mywebsite.com/myscript.txt)

11

আপনি এটি করতে পারেন:

wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash

11

এটি করার সবচেয়ে ভাল উপায়

curl http://domain/path/to/script.sh | bash -s arg1 arg2

যা @ ব্যবহারকারী 77115 দ্বারা উত্তরের সামান্য পরিবর্তন


6

আমি প্রায়শই নীচের ব্যবহারটি যথেষ্ট

curl -s http://mywebsite.com/myscript.txt | sh

তবে একটি পুরানো সিস্টেমে (কার্নেল ২.৪), এটি সমস্যার মুখোমুখি হয় এবং নিম্নলিখিতগুলি এটি সমাধান করতে পারে, আমি আরও অনেককে চেষ্টা করেছিলাম, কেবল নিম্নলিখিত কাজগুলি

curl -s http://mywebsite.com/myscript.txt -o a.sh && sh a.sh && rm -f a.sh

উদাহরণ

$ curl -s someurl | sh
Starting to insert crontab
sh: _name}.sh: command not found
sh: line 208: syntax error near unexpected token `then'
sh: line 208: ` -eq 0 ]]; then'
$

নেটওয়ার্কটি ধীর হয়ে যেতে পারে বা বাশ সংস্করণটি খুব পুরানো যা নেট ধীরে ধীরে নেটওয়ার্ক পরিচালনা করতে পারে না by

তবে নিম্নলিখিত সমস্যার সমাধান করে

$ curl -s someurl -o a.sh && sh a.sh && rm -f a.sh
Starting to insert crontab
Insert crontab entry is ok.
Insert crontab is done.
okay
$

4

এছাড়াও:

curl -sL https://.... | sudo bash -

3
শেষ স্ট্রিপটির অর্থ কী?
515

বাশ ম্যান পৃষ্ঠা থেকে: এ - বিকল্পগুলির শেষের ইঙ্গিত দেয় এবং পরবর্তী বিকল্প প্রক্রিয়াটিকে অক্ষম করে। - এর পরে যে কোনও যুক্তি ফাইলের নাম এবং যুক্তি হিসাবে বিবেচিত হবে। এর একটি যুক্তি - এর সমতুল্য -।
মিংজিয়াং শি

3

শুধু আমড়া এবং ব্যবহারকারীর 77115 এর উত্তরগুলির সংমিশ্রণ:

wget -qO- https://raw.githubusercontent.com/lingtalfi/TheScientist/master/_bb_autoload/bbstart.sh | bash -s -- -v -v

এটি bbstart.sh দূরবর্তী স্ক্রিপ্টটি -v -v বিকল্পগুলি পাস করে কার্যকর করে।


2

আমি নিম্নলিখিত কমান্ডটি ব্যবহার করেছি এমন কিছু অপ্রচলিত স্ক্রিপ্টগুলি:

sh -c "$(curl -fsSL <URL>)"

আমি ইউআরএল থেকে সরাসরি স্ক্রিপ্টগুলি সম্পাদন এড়াতে পরামর্শ দিই। আপনার নিশ্চিত হওয়া উচিত যে URL টি নিরাপদ এবং কার্যকর করার আগে স্ক্রিপ্টের সামগ্রীটি পরীক্ষা করে দেখুন, আপনি মৃত্যুর আগে ফাইলটি বৈধ করতে একটি SHA256 চেকসাম ব্যবহার করতে পারেন।


0

এই উপায়টি ভাল এবং প্রচলিত:

17:04:59@itqx|~
qx>source <(curl -Ls http://192.168.80.154/cent74/just4Test) Lord Jesus Loves YOU
Remote script test...
Param size: 4

---------
17:19:31@node7|/var/www/html/cent74
arch>cat just4Test
echo Remote script test...
echo Param size: $#

-3
bash | curl http://your.url.here/script.txt

প্রকৃত উদাহরণ:

juan@juan-MS-7808:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


juan@juan-MS-7808:~$ 

এটি সরাসরি ভুল। পোস্ট করার আগে আপনার স্ক্রিপ্টগুলি পরীক্ষা করুন এবং জাল আউটপুট দেবেন না।
কর্কম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.