স্ক্রিপ্টের শেবাং লাইনে আমি কীভাবে একাধিক সম্ভাবনা থাকতে পারি?


16

আমি কিছুটা আকর্ষণীয় পরিস্থিতিতে আছি যেখানে আমার কাছে পাইথন স্ক্রিপ্ট রয়েছে যা তাত্ত্বিকভাবে বিভিন্ন পরিবেশের (এবং PATHs) এবং বিভিন্ন লিনাক্স সিস্টেমে বিভিন্ন ব্যবহারকারী দ্বারা চালিত হতে পারে। আমি চাই যে এই স্ক্রিপ্টটি কৃত্রিম সীমাবদ্ধতা ছাড়াই যথাসম্ভব এগুলির উপর কার্যকর করা হোক। এখানে কিছু পরিচিত সেটআপ রয়েছে:

  • পাইথন ২.6 হ'ল সিস্টেম পাইথন সংস্করণ, সুতরাং পাইথন, পাইথন ২ এবং পাইথন ২..6 সবই / usr / bin (এবং সমতুল্য) -এ বিদ্যমান।
  • পাইথন ২.6 হ'ল উপরে পাইথন সংস্করণ, তবে পাইথন ২.7 এটি পাইথন ২..7 হিসাবে ইনস্টল করা আছে।
  • পাইথন ২.৪ হ'ল সিস্টেম পাইথন সংস্করণ, যা আমার স্ক্রিপ্ট সমর্থন করে না। / Usr / বিনে আমাদের কাছে পাইথন, পাইথন 2 এবং পাইথন 2.4 রয়েছে যা সমান এবং পাইথন 2.5 রয়েছে, যা স্ক্রিপ্ট সমর্থন করে।

আমি এই তিনটি ক্ষেত্রে একই এক্সিকিউটেবল অজগর স্ক্রিপ্টটি চালাতে চাই। এটি যদি প্রথমে /usr/bin/python2.7 ব্যবহার করার চেষ্টা করে তবে এটি খুব ভাল হবে /usr/bin/python2.6 এ ফিরে এসে /usr/bin/python2.5 এ পড়ে, যদি তাদের মধ্যে উপস্থিত না থাকে তবে কেবল ত্রুটিযুক্ত। আমি খুব সাম্প্রতিক ২.x ব্যবহার করে এটির সাথে ঝুলিয়ে নেই, যদিও যতক্ষণ না উপস্থিত উপস্থিত কেউ সঠিক দোভাষী খুঁজে পেতে সক্ষম হয়।

আমার প্রথম ঝোঁকটি ছিল শেবাং লাইনটি থেকে পরিবর্তন করা:

#!/usr/bin/python

প্রতি

#!/usr/bin/python2.[5-7]

যেহেতু এটি বাশ ভাল কাজ করে। তবে স্ক্রিপ্টটি চালনা দেয়:

/usr/bin/python2.[5-7]: bad interpreter: No such file or directory

ঠিক আছে, তাই আমি নিম্নলিখিতগুলি চেষ্টা করে দেখি, যা ব্যাশে কাজ করে:

#!/bin/bash -c /usr/bin/python2.[5-7]

তবে আবার, এতে ব্যর্থ হয়:

/bin/bash: - : invalid option

ঠিক আছে, স্পষ্টতই আমি কেবল একটি পৃথক শেল স্ক্রিপ্ট লিখতে পারি যা সঠিক দোভাষীটি খুঁজে পায় এবং যে কোনও দোভাষী খুঁজে পাওয়া যায় না তা ব্যবহার করে পাইথন স্ক্রিপ্টটি চালায়। আমি সবেমাত্র দু'টি ফাইল বিতরণ করার ঝামেলা পেয়েছি যেখানে সর্বাধিক আপ টু ডেট অজগর 2 ইন্টারপ্রেটার ইনস্টল থাকা যতক্ষণ না এটি চালানো উচিত one লোককে স্পষ্টরূপে দোভাষী বলতে অনুরোধ করা (উদাহরণস্বরূপ $ python2.5 script.py) কোনও বিকল্প নয়। কোনও নির্দিষ্ট উপায়ে সেটআপ করা ব্যবহারকারীর প্যাথের উপর নির্ভর করাও কোনও বিকল্প নয়।

সম্পাদনা:

পাইথন স্ক্রিপ্টের মধ্যে সংস্করণ পরীক্ষা করা কার্যকর হবে না যেহেতু আমি পাইথন ২.6 হিসাবে বিদ্যমান "উইথ" স্টেটমেন্টটি ব্যবহার করছি (এবং এর সাথে 2.5 ব্যবহার করা যেতে পারে from __future__ import with_statement)। এটি স্ক্রিপ্টটি ব্যবহারকারী-বন্ধুত্বপূর্ণ সিন্ট্যাক্স এরিয়ারের সাথে সাথে সাথেই ব্যর্থ হয়ে যায় এবং আমাকে প্রথমে সংস্করণটি পরীক্ষা করার এবং উপযুক্ত ত্রুটি নির্গত করার সুযোগ থেকে বাধা দেয়।

উদাহরণ: (২.6 এর চেয়ে কম পাইথন ইন্টারপ্রেটার দিয়ে এটি ব্যবহার করে দেখুন)

#!/usr/bin/env python

import sys

print "You'll never see this!"
sys.exit()

with open('/dev/null', 'w') as out:
    out.write('something')

আপনি যা চান তা আসলে নয়, এর জন্য মন্তব্য করুন। তবে import sys; sys.version_info()ব্যবহারকারীর প্রয়োজনীয় অজগর সংস্করণ আছে কিনা তা পরীক্ষা করে দেখতে পারেন।
বার্নহার্ড

2
@ বার্নহার্ড হ্যাঁ এটি সত্য, তবে ততক্ষণে এটি সম্পর্কে কিছু করতে দেরি হয়ে গেছে। তৃতীয় অবস্থার জন্য আমি উপরে স্ক্রিপ্টটি সরাসরি চালানোর জন্য তালিকাবদ্ধ করেছি (অর্থাত্ ./script.py) এটি অজগর 2.4 সৃষ্টি করবে, যার ফলে আপনার কোডটি এটির ভুল সংস্করণ (এবং প্রস্থান ছাড়ুন) সম্ভবত এটি সনাক্ত করবে। তবে একটি পুরোপুরি ভাল পাইথন 2.5 রয়েছে যা পরিবর্তে দোভাষী হিসাবে ব্যবহার করা যেতে পারে!
ব্যবহারকারী 108471

2
একটি উপযুক্ত অজগর আছে কিনা তা বের করার জন্য একটি মোড়ক স্ক্রিপ্ট ব্যবহার করুন এবং execযদি তা হয় তবে অন্যথায় একটি ত্রুটি মুদ্রণ করুন।
কেভিন

1
সুতরাং প্রথম ফাইলটি একই ফাইলটিতে করুন।
কেভিন

9
@ ব্যবহারকারী 108471: আপনি ধরে নিচ্ছেন শ্যাবাং লাইন বাশ দ্বারা পরিচালিত হয়েছে। এটি নয়, এটি একটি সিস্টেম কল ( execve)। আর্গুমেন্টগুলি স্ট্রিং লিটারেল, কোনও গ্লোববিং, কোনও রেজেক্সপস নয়। এটাই. এমনকি প্রথম আর্গটি যদি "/ bin / bash" হয় এবং দ্বিতীয় বিকল্পগুলি ("-c ...") সেগুলি অপশন শেল দ্বারা বিশ্লেষণ করে না। এগুলি ব্যাশ এক্সিকিউটেবলের কাছে অপরিশোধিত হস্তান্তর করা হয়, এ কারণেই আপনি এই ত্রুটিগুলি পান। এছাড়াও, শেবাং কেবল তখনই কাজ করে যদি এটি শুরু হয়। সুতরাং আপনি এখানে ভাগ্যের বাইরে, আমি ভয় পাচ্ছি (এমন একটি স্ক্রিপ্টের সংক্ষিপ্ত যা অজগর দোভাষী খুঁজে পেয়েছে এবং এটিকে এখানে একটি ডক ফিড করেছে, যা ভয়াবহ জগাখিচুড়ি মনে হচ্ছে)।
স্বর্ণলোক

উত্তর:


13

আমি বিশেষজ্ঞ নই, তবে আমি বিশ্বাস করি যে আপনার ব্যবহারের জন্য সঠিক পাইথন সংস্করণ নির্দিষ্ট করতে হবে না এবং সেই পছন্দটি সিস্টেম / ব্যবহারকারীর কাছে রেখে দেওয়া উচিত।

এছাড়াও আপনাকে স্ক্রিপ্টে অজগরের হার্ডকোডিংয়ের পরিবর্তে এটি ব্যবহার করা উচিত:

#!/usr/bin/env python

অথবা

#!/usr/bin/env python3 (or python2)

এটি সমস্ত সংস্করণে পাইথন ডক দ্বারা প্রস্তাবিত :

একটি ভাল পছন্দ সাধারণত হয়

#!/usr/bin/env python

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

বিভিন্ন বিতরণে পাইথন বিভিন্ন স্থানে ইনস্টল করা থাকতে পারে তাই envএটি এর জন্য অনুসন্ধান করবে PATH। এটি সমস্ত বড় লিনাক্স বিতরণে এবং ফ্রিবিএসডি-তে যা দেখা যায় সেগুলি থেকে পাওয়া উচিত।

স্ক্রিপ্টটি পাইথনের সেই সংস্করণ দিয়ে চালিত করা উচিত যা আপনার PATH এ রয়েছে এবং যা আপনার বিতরণ দ্বারা চয়ন করা হয়েছে *।

যদি আপনার স্ক্রিপ্টটি পাইথনের ২.৪ ব্যতীত সমস্ত সংস্করণের সাথে সামঞ্জস্যপূর্ণ হয় তবে এটি কেবল পাইথন ২.৪ এ চালিত হলে এর ভিতরে যাচাই করে নেওয়া উচিত এবং কিছু তথ্য মুদ্রণ করতে এবং প্রস্থান করতে হবে।

আরও পড়তে হবে

  • এখানে আপনি পাইথনটি বিভিন্ন সিস্টেমে কী কী জায়গায় ইনস্টল করা যেতে পারে তার উদাহরণ পেতে পারেন।
  • এখানে আপনি ব্যবহারের জন্য কিছু সুবিধা এবং অসুবিধাগুলি খুঁজে পেতে পারেন env
  • এখানে আপনি PATH কারসাজির উদাহরণ এবং বিভিন্ন ফলাফল পেতে পারেন।

পাদটীকা

* জেন্টুতে একটি টুল বলা হয় eselect। এটি ব্যবহার করে আপনি বিভিন্ন অ্যাপ্লিকেশনগুলির ডিফল্ট সংস্করণ (পাইথন সহ) ডিফল্ট হিসাবে সেট করতে পারেন:

$ eselect python list
Available Python interpreters:
  [1]   python2.6
  [2]   python2.7 *
  [3]   python3.2
$ sudo eselect python set 1
$ eselect python list
Available Python interpreters:
  [1]   python2.6 *
  [2]   python2.7
  [3]   python3.2

2
আমি প্রশংসা করি যে আমি যা করতে চাই তা সম্পূর্ণ অনুশীলন হিসাবে বিবেচিত হবে counter আপনি যা পোস্ট করেছেন তা সম্পূর্ণ যুক্তিসঙ্গত, তবে একই সাথে এটি আমি যা চাইছি তা নয়। আমি চাই না যে আমি যখন ব্যবহার করি সে সব পরিস্থিতিতে পাইথনের উপযুক্ত সংস্করণ সনাক্ত করা যখন সম্ভব তখন আমার ব্যবহারকারীরা পাইথনের যথাযথ সংস্করণে স্পষ্টভাবে আমার স্ক্রিপ্টটি নির্দেশ করুন।
ব্যবহারকারী 108471

1
দয়া করে আমার আপডেটটি দেখুন কেন আমি "পাইথন ২.৪ এ এটি চালিত হয় যদি কেবল এটির ভিতরে যাচাই করে না এবং কিছু তথ্য মুদ্রণ করে প্রস্থান করি"।
ব্যবহারকারী 108471

তুমি ঠিক. আমি এই প্রশ্নটি কেবল এসও-তে পেয়েছি এবং এখন আমি দেখতে পাচ্ছি যে আপনি যদি একটি মাত্র ফাইল রাখতে চান তবে তা করার কোনও বিকল্প নেই ...
pbm

9

কয়েকটি মন্তব্য থেকে কিছু ধারণার উপর ভিত্তি করে, আমি কাজ করে বলে মনে হচ্ছে একটি সত্যই কুরুচিপূর্ণ হ্যাক একসাথে cobble পরিচালিত। স্ক্রিপ্টটি বাশ স্ক্রিপ্টে পাইথন স্ক্রিপ্টটি মুড়িয়ে দেয় এবং এটি "এখানে নথির" মাধ্যমে পাইথন দোভাষীকে দেয়।

প্রথমেই:

#!/bin/bash

''':'
vers=( /usr/bin/python2.[5-7] )
latest="${vers[$((${#vers[@]} - 1))]}"
if !(ls $latest &>/dev/null); then
    echo "ERROR: Python versions < 2.5 not supported"
    exit 1
fi
cat <<'# EOF' | exec $latest - "$@"
''' #'''

পাইথন কোডটি এখানে যায়। তারপরে একেবারে শেষে:

# EOF

যখন ব্যবহারকারী স্ক্রিপ্টটি চালায়, তখন সর্বশেষতম পাইথন সংস্করণটি 2.5 এবং 2.7 এর মধ্যে বাকী স্ক্রিপ্টটিকে এখানে ডকুমেন্ট হিসাবে ব্যাখ্যা করতে ব্যবহৃত হয়।

কিছু শেননিগান সম্পর্কিত একটি ব্যাখ্যা:

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

সরাসরি চালানোর সময় (এখন বাশ স্ক্রিপ্ট হিসাবে) প্রথম দুটি একক উদ্ধৃতি খালি স্ট্রিং হয়ে যায় এবং তৃতীয় একক-উদ্ধৃতিটি কেবল একটি কোলন সমেত চতুর্থ একক-উদ্ধৃতি সহ অন্য স্ট্রিং গঠন করে। এই স্ট্রিংটি কোনও বাছাই হিসাবে বাশ দ্বারা ব্যাখ্যা করা হয়েছে। বাকি সমস্ত কিছুই হ'ল / ইউএসআর / বিনে পাইথন বাইনারিগুলি গ্লোব করার জন্য, শেষটিটি নির্বাচন করে এবং এক্সিকিউট চালানো, বাকী ফাইলটি এখানে নথিরূপে পাস করার জন্য synt এখানে দস্তাবেজটি পাইথনের ট্রিপল-একক-উদ্ধৃতি দিয়ে শুরু হয় যার মধ্যে কেবল একটি হ্যাশ / পাউন্ড / অক্টথোরপে চিহ্ন রয়েছে। '# ইওএফ' লাইন পঠন এখানে ডকুমেন্টটি শেষ না করা পর্যন্ত স্ক্রিপ্টের বাকী অংশটিকে স্বাভাবিক হিসাবে ব্যাখ্যা করা হয়।

আমি অনুভব করি এটি বিকৃত, তাই আমি আশা করি কারওর আরও ভাল সমাধান হবে।


সম্ভবত এটি এতটা বাজে নয়;) +1
স্বর্ণিলকস

এর অসুবিধাটি হ'ল এটি বেশিরভাগ সম্পাদকগুলিতে সিনট্যাক্সের রঙের গোলমাল করবে
লাই রায়ান

@ লাইরিয়ান এটি নির্ভর করে। আমার স্ক্রিপ্ট একটি .py ফাইল নাম এক্সটেনশন ব্যবহার করে, যা বেশিরভাগ পাঠ্য সম্পাদকরা রঙিনের জন্য কোন সিনট্যাক্স ব্যবহার করবেন তা চয়ন করার সময় পছন্দ করেন। Hypothetically, আমি যদি .py এক্সটেনশন ছাড়াই এই নামান্তর ছিল, আমি একটি modeline মত কিছু দিয়ে সঠিক বাক্য গঠন (অন্তত তেজ ব্যবহারকারীদের জন্য) প্রজ্ঞান ব্যবহার করতে পারে: # ft=python
ব্যবহারকারী 108471

7

শেবাং লাইন কেবল কোনও দোভাষীকে একটি নির্দিষ্ট পথ নির্দিষ্ট করতে পারে। #!/usr/bin/envদোভাষীর খোঁজ করার কৌশল আছে PATHতবে তা। আপনি যদি আরও পরিশীলিত করতে চান তবে আপনাকে কিছু র‌্যাপার শেল কোড লিখতে হবে।

সর্বাধিক সুস্পষ্ট সমাধান হ'ল একটি র‌্যাপার স্ক্রিপ্ট লেখা। পাইথন স্ক্রিপ্ট কল করুন foo.realএবং একটি মোড়ক স্ক্রিপ্ট করুন foo:

#!/bin/sh
if type python2 >/dev/null 2>/dev/null; then
  exec python2 "$0.real" "$@"
else
  exec python "$0.real" "$@"
fi

আপনি যদি একটি ফাইলে সমস্ত কিছু রাখতে চান, আপনি প্রায়শই এটিকে বহুবিশেষ তৈরি করতে পারেন যা একটি #!/bin/shলাইন দিয়ে শুরু হয় (সুতরাং শেল দ্বারা চালিত হবে) তবে অন্য ভাষায় এটি একটি বৈধ স্ক্রিপ্ট। ভাষার উপর নির্ভর করে একটি বহুভুজ অসম্ভব হতে পারে ( #!উদাহরণস্বরূপ যদি একটি সিনট্যাক্স ত্রুটির কারণ হয়)। পাইথনে, এটি খুব কঠিন নয়।

#!/bin/sh
''':'
if type python2 >/dev/null 2>/dev/null; then
  exec python2 "$0.real" "$@"
else
  exec python "$0.real" "$@"
fi
'''
# real Python script starts here
def …

(এর মধ্যকার সম্পূর্ণ টেক্সট '''এবং '''toplevel, যা কোনো প্রভাব নেই এ পাইথন স্ট্রিং। শেল জন্য, দ্বিতীয় লাইন ''':'যা stripping কোট পরে কোন সমিতি কমান্ড :।)


দ্বিতীয় সমাধানটি দুর্দান্ত কারণ এটির উত্তরের# EOF মতো এই উত্তরটির মতো যোগ করার দরকার নেই । আপনার পদ্ধতির মূলত এখানে বর্ণিত হিসাবে একই ।
স্কুবার্থ

6

আপনার প্রয়োজনীয়তা বাইনারিগুলির একটি পরিচিত তালিকা হিসাবে, আপনি নিম্নলিখিতটি দিয়ে পাইথনে এটি করতে পারেন could পাইথনের একক অঙ্কের ছোট / বড় সংস্করণে এটি কাজ করবে না তবে শীঘ্রই যে ঘটছে তা আমি দেখতে পাচ্ছি না।

বাইনারিটিতে ট্যাগ করা সংস্করণটি পাইথন এক্সিকিউটিভের বর্তমান সংস্করণটির চেয়ে বেশি হলে অর্ডারযুক্ত, ক্রমযুক্ত পাইথনগুলির তালিকা বাড়ানো থেকে ডিস্কে অবস্থিত সর্বাধিক সংস্করণ চালায়। "ক্রমবর্ধমান সংস্করণগুলির তালিকা" এই কোডটির জন্য গুরুত্বপূর্ণ বিট bit

#!/usr/bin/env python
import os, sys

pythons = [ '/usr/bin/python2.3','/usr/bin/python2.4', '/usr/bin/python2.5', '/usr/bin/python2.6', '/usr/bin/python2.7' ]
py = list(filter( os.path.isfile, pythons ))
if py:
  py = py.pop()
  thepy = int( py[-3:-2] + py[-1:] )
  mypy  = int( ''.join( map(str, sys.version_info[0:2]) ) )
  if thepy > mypy:
    print("moving versions to "+py)
    args = sys.argv
    args.insert( 0, sys.argv[0] )
    os.execv( py, args )

print("do normal stuff")

আমার স্ক্র্যাচ অজগরটির জন্য ক্ষমা চাই


মৃত্যুদণ্ড কার্যকর করার পরেও কি তা চালিয়ে দেওয়া হবে না? তাই স্বাভাবিক জিনিস দুবার কার্যকর করা হবে?
জানুস ট্রয়লসেন

1
এক্সিকিউটি বর্তমানে চালিত প্রোগ্রামটির পরিবর্তে নতুন লোড হওয়া প্রোগ্রামের চিত্রটির পরিবর্তে
ম্যাট

এটি দুর্দান্ত সমাধান হিসাবে দেখায় যা আমি এসেছি তার চেয়ে কম কুৎসিত বোধ করে। আমি এটি চেষ্টা করে দেখতে পারি যে এটি এই উদ্দেশ্যে কাজ করে কিনা।
ব্যবহারকারী 108471

এই পরামর্শটি আমার প্রয়োজনের জন্য খুব প্রায় কাজ করে। একমাত্র ত্রুটিটি এমনটি যা আমি প্রাথমিকভাবে উল্লেখ করি নি: পাইথন 2.5 সমর্থন করার জন্য, আমি ব্যবহার করি from __future__ import with_statementযা পাইথন স্ক্রিপ্টের প্রথম জিনিস হতে হবে। আমি মনে করি না যে নতুন দোভাষী শুরু করার সময় আপনি সেই ক্রিয়াটি সম্পাদন করার কোনও উপায় জানেন?
ব্যবহারকারী 108471

আপনি কি নিশ্চিত এটা করা প্রয়োজন খুব প্রথম জিনিস? বা আপনি চেষ্টা করার আগে এবং কোনও withসাধারণ আমদানির মতো কোনও ব্যবহার করার আগে ? if mypy == 25: from __future__ import with_statement'নরমাল স্টাফস' এর ঠিক আগে কোনও অতিরিক্ত কাজ করে? আপনার যদি সম্ভবত 2.4 সমর্থন না করে তবে আপনার প্রয়োজন নেই।
ম্যাট

0

আপনি একটি ছোট বাশ স্ক্রিপ্ট লিখতে পারেন যা উপলব্ধ ফাইথন এক্সিকিউটেবলের জন্য পরীক্ষা করে এবং স্ক্রিপ্টের সাথে এটি প্যারামিটার হিসাবে কল করে। তারপরে আপনি এই স্ক্রিপ্টটিকে শেবাং লাইন লক্ষ্য তৈরি করতে পারেন:

#!/my/python/search/script

এবং এই স্ক্রিপ্টটি সহজভাবে (অনুসন্ধানের পরে) করে:

"$python_path" "$1"

আমি নিশ্চিত নই যে কার্নেল এই স্ক্রিপ্টটি ইন্ডিरेশন গ্রহণ করবে কিনা তবে আমি পরীক্ষা করে দেখেছি এবং এটি কার্যকর হয়।

সম্পাদনা 1

এই বিব্রতকর অনাদরহিতাকে অবশেষে একটি ভাল প্রস্তাব করার জন্য:

উভয় স্ক্রিপ্ট এক ফাইলে একত্রিত করা সম্ভব। আপনি কেবল এ্যাশ ডকুমেন্ট হিসাবে বাশ স্ক্রিপ্টে পাইথন স্ক্রিপ্টটি লিখুন (আপনি যদি পাইথন স্ক্রিপ্ট পরিবর্তন করেন তবে আপনাকে আবার স্ক্রিপ্টগুলি আবার অনুলিপি করতে হবে)। হয় আপনি উদাহরণস্বরূপ / টেম্পে একটি অস্থায়ী ফাইল তৈরি করেন বা (যদি পাইথন এটি সমর্থন করে তবে আমি জানি না) আপনি দোভাষীকে ইনপুট হিসাবে স্ক্রিপ্টটি সরবরাহ করেন:

# do the search here and then
# either
cat >"tmpfile" <<"EOF" # quoting EOF is important so that bash leaves the python code alone
# here is the python script
EOF
"$python_path" "tmpfile"
# or
"$python_path" <<"EOF"
# here is the python script
EOF

কমিউশনটির শেষ অনুচ্ছেদে ইতিমধ্যে ইতিমধ্যে বর্ণিত সমাধানটি এটিই কমবেশি!
বার্নহার্ড

চালাক, তবে এটির জন্য এই যাদু স্ক্রিপ্টটি প্রতিটি সিস্টেমে কোথাও ইনস্টল করা দরকার।
ব্যবহারকারীর 108471

@ বার্নহার্ড ওউপস, ধরা পড়েছে। ভবিষ্যতে আমি শেষ পর্যন্ত পড়ব। ক্ষতিপূরণ হিসাবে আমি এটি একটি ফাইল সমাধানে উন্নতি করতে চলেছি।
হউক লেগেছে

@ ইউজার 108471 ম্যাজিক স্ক্রিপ্টটিতে এরকম কিছু থাকতে পারে: $(ls /usr/bin/python?.? | tail -n1 )তবে আমি এটি শিবাংয়ে চালাকভাবে ব্যবহার করতে সফল হই নি।
বার্নহার্ড

@ বার্নহার্ড আপনি কি শেবাং লাইনের মধ্যে অনুসন্ধান করতে চান? আইআইআরসি কার্নেলটি শেবাং লাইনে উদ্ধৃতি দেওয়ার বিষয়ে চিন্তা করে না। অন্যথায় (যদি এর মধ্যে এটি পরিবর্তিত হয়) কেউ `#! / Bin / bash -c do_search_here_without_ whitespace ...; এক্সিকিউট y পাইথন" $ 1 "এর মতো কিছু করতে পারে তবে সাদা অংশ ছাড়া কীভাবে এটি করা যায়?
হউক লেগেছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.