কমান্ড-লাইন আর্গুমেন্ট হিসাবে অন্য কমান্ডের আউটপুটকে কীভাবে পাস করবেন?


50

সুতরাং আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা আমি যখন এটি দুটি ঠিকানা দেবো, তখন দুটি HTML লিঙ্ক অনুসন্ধান করবে:

echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'

আমি এটিতে প্রেরণ করতে চাই wgetএবং তারপরে একটি ফাইল বলে আউটপুট সংরক্ষণ করতে চাই temp.html। আমি এটি চেষ্টা করেছিলাম, কিন্তু কাজ করে না। কেউ কেন এবং / অথবা আমাকে একটি সমাধান দিতে পারেন দয়া করে ব্যাখ্যা করতে পারেন?

#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" |  sed 's/ /%/g'
wget $url

এই জাতীয় কিছু ডিবাগ করার জন্য আপনার ভেরিয়েবলের মানগুলি পরীক্ষা করতে (এটিকে টার্মিনালে প্রতিধ্বনি দিয়ে) প্রায়শই আপনাকে দ্রুত সমাধানে নিয়ে আসে।
কাস্টমার

উত্তর:


48

কমান্ডের মূল্যায়নের জন্য আপনি ব্যাকটিক্স (`) ব্যবহার করতে পারেন এবং কমান্ডের আউটপুটটিতে বিকল্প ব্যবহার করতে পারেন, যেমন:

echo "Number of files in this directory: `ls | wc -l`"

আপনার ক্ষেত্রে:

wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`


19

আপনি "xargs" ব্যবহার করতে পারেন। একটি তুচ্ছ উদাহরণ:

ls -1 *.c | sort -n | xargs cat

আপনাকে খেয়াল রাখতে হবে যে xargs তার স্টিনকে কমমানের দুটি বা তার বেশি অনুরোধগুলিতে ভাগ না করে (উপরের উদাহরণে "বিড়াল")।


আমি এখানেই শেষ হয়েছি, কারণ আমি এই আদেশের নামটি মনে করতে পারি নি। আমার প্রিয় ব্যবহারের ঘটনাটি হ'ল: xargs -I% কিছু_কমন্ড - ইনপুট =% -e -t -c (আমি এটি অন্যদের জন্য একটি নোট হিসাবে এখানে রেখেছি যারা একই ট্রেস অনুসরণ করে)
mpasko256

14

আপনি আসলে আপনার ইউআরএল লাইনটি সম্পাদন করছেন না:

#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url

5

দেখে মনে হচ্ছে আপনি এখানে উত্তরগুলির সংমিশ্রণটি ব্যবহার করতে পারেন। আমি অনুমান করছি আপনি ইউআরএল-এ পালানো এস্কি মানগুলির সাথে স্পেস চরগুলি প্রতিস্থাপন করতে চাইছেন। এটি করার জন্য, আপনাকে কেবল "%" নয়, তাদের "% 20" দিয়ে প্রতিস্থাপন করতে হবে। এখানে একটি সমাধান যা আপনাকে একটি সম্পূর্ণ উত্তর দিতে হবে:

$ wget `echo http://maps.google.be/maps\?saddr\=$1\&daddr\=$2 | sed -e 's/\ /\%20/g'` -q -O temp.html

ব্যাকটিকগুলি ইঙ্গিত দেয় যে বদ্ধ কমান্ডটি প্রথমে ব্যাখ্যা করা উচিত এবং ফলাফলটি উইজেটে প্রেরণ করা উচিত। লক্ষ্য করুন আমি সেড কমান্ডে স্থান এবং% অক্ষরগুলি এড়িয়ে গিয়েছি যাতে তাদের ভুল ব্যাখ্যা দেওয়া না যায়। উইজেটের জন্য -Q বিকল্পটি স্ক্রিনে প্রিন্ট হওয়া কমান্ড থেকে প্রসেসিং আউটপুটকে বাধা দেয় (যখন আপনি কাজের ক্ষেত্রে স্থির থাকবেন না তখন স্ক্রিপ্টিংয়ের জন্য সহজ) এবং -O বিকল্পটি আউটপুট ফাইল নির্দিষ্ট করে। এফওয়াইআই, যদি আপনি কোনও ফাইলে আউটপুট সংরক্ষণ করতে না চান তবে টার্মিনালে এটি দেখতে চান, স্টডআউট নির্দেশ করতে কোনও ফাইলের পরিবর্তে "-" ব্যবহার করুন।


3

উইজেট স্ট্যান্ডিনকে -স্যুইচ সহ গ্রহণ করে ।

আপনি যদি কোনও ফাইলে আউটপুট সংরক্ষণ করতে চান তবে -Oস্যুইচটি ব্যবহার করুন ।

echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.