বাশ করতে "পড়ুন" দিয়ে একটি স্ক্রিপ্ট পাইপ করা


10

আমি এটা মাধ্যমে বংশীধ্বনিতুল্য দ্বারা একটি স্ক্রিপ্ট চালাতে সমস্যা প্রয়োজন bashসঙ্গে wget(বদলে সরাসরি চলমান ব্যাশ সহ)।

$ wget -O - http://example.com/my-script.sh | bash

এটি কাজ করছে না কারণ আমার স্ক্রিপ্টটির readবিবৃতি রয়েছে। বাশ-এ যাওয়ার সময় পাইপিং করার সময় কোনও কারণে এগুলি কাজ করে না:

# Piping to bash works in general
$ echo 'hi'
hi
$ echo "echo 'hi'" | bash
hi

# `read` works directly
$ read -p "input: " var
input: <prompt>

# But not when piping - returns immediately
$ echo 'read -p "input: " var' | bash
$

অনুরোধ করা input:এবং এটির মতো মান জিজ্ঞাসা করার পরিবর্তে , পঠন কমান্ডটি কেবল তার দ্বারা পাস করা হবে bash

কেউ কি জানে কিভাবে আমি করতে পারেন নল দিয়ে একটি স্ক্রিপ্ট readথেকে bash?

উত্তর:


16

readস্ট্যান্ডার্ড ইনপুট থেকে পড়ে। তবে ব্যাশ প্রক্রিয়াটির স্ট্যান্ডার্ড ইনপুটটি ইতিমধ্যে স্ক্রিপ্ট দ্বারা নেওয়া হয়েছে। শেলের উপর নির্ভর করে হয় হয় readকিছুই পড়বে না কারণ শেলটি ইতিমধ্যে পুরো স্ক্রিপ্টটি পড়েছে এবং এটি বিশ্লেষণ করেছে বা স্ক্রিপ্টে readঅবিশ্বাস্য রেখাগুলি গ্রাস করবে।

সহজ সমাধান:

bash -c "$(wget -O - http://example.com/my-script.sh)"

এই জটিল দৃশ্যের জন্য ভাল সমাধানের তুলনায় শিক্ষার উদ্দেশ্যে আরও জটিল সমাধান for

echo '{ exec </dev/tty; wget -O - http://example.com/my-script.sh; }' | bash

অান্তরিক ধন্যবাদ. এটি প্রায় হিসাবে মার্জিত।
রবিন উইনস্লো

2

প্রক্রিয়া প্রতিস্থাপন আপনি যা চান তা করবে:

bash <(wget ...)

এটি বলেছিল, আমাকে এখানে আপনার অনুপ্রেরণা নিয়ে প্রশ্ন করতে হবে। আপনি যদি ওয়েবসারভারটি নিয়ন্ত্রণ করেন (এবং https ব্যবহার করেন) তবে সম্ভবত এটি বোধগম্য হতে পারে। তবে কেবল ইন্টারনেট অন্ধ থেকে একটি স্ক্রিপ্ট চালানো খুব ঝুঁকিপূর্ণ।


just running a script from the internet blind is very risky- ওহে আমরা জানি এটি ঝুঁকিপূর্ণ, তবে লোকেরা নির্দিষ্ট সংস্থার স্ক্রিপ্টগুলিতে বিশ্বাস রাখতে বেছে নিতে পারে। @ Xen2050 এর উত্তরে মন্তব্যগুলিতে আলোচনাটি দেখুন।
রবিন উইনস্লো

1

এর সাথে কিছু ভুল আছে:

wget -O tmpscript.sh http://example.com/my-script.sh
chmod +x tmpscript.sh
tmpscript.sh

?


'তবে আমার একটি ফাইল তৈরি করতে হবে। মানে এটি কাজ করবে, এটি কিছুটা অগোছালো।
রবিন উইনস্লো

1
সত্য। যদিও এটি ব্যবহারের একটি ভাল কারণ /tmp, প্রচুর প্রোগ্রাম টেম্প ফাইল ব্যবহার করে। আমি প্রথমে একবার না দেখে কোনও ডাউনলোড স্ক্রিপ্ট তত্ক্ষণাত্ চালাবার জন্য সাহসী হব ...
Xen2050

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

3
আমি অন্য কাউকে এই প্রশ্নটি খুঁজে পাওয়ার কথা ভাবছি (সম্ভবত সম্পূর্ণ নতুন ব্যবহারকারী) এর চেয়ে ভাল আরও কিছু জানেন না।
Xen2050
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.