লিনাক্সে, শিবাং খুব নমনীয় নয়; একাধিক উত্তর অনুসারে ( স্টিফেন কিটের উত্তর এবং জার্গ ডব্লু মিতাগের ), শেবাং লাইনে একাধিক যুক্তি পাস করার কোনও নির্ধারিত উপায় নেই।
এটি কারও কাজে আসবে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে অভাবের বৈশিষ্ট্যটি বাস্তবায়নের জন্য আমি একটি শর্ট স্ক্রিপ্ট লিখেছি। Https://gist.github.com/loxaxs/7cbe84aed1c38cf18f70d8427bed1efa দেখুন ।
এম্বেড থাকা ওয়ার্কআরউন্ডগুলি লেখাও সম্ভব। হ্যালো, আমি একই পরীক্ষার স্ক্রিপ্টে প্রয়োগ চারটি ভাষা-অজ্ঞাস্তিক কাজের ক্ষেত্র এবং ফলাফল প্রতিটি মুদ্রণ উপস্থাপন করি। আমি অনুমান যে স্ক্রিপ্ট এক্সিকিউটেবল এবং হয় /tmp/shebang
।
প্রক্রিয়া প্রতিস্থাপনের ভিতরে আপনার স্ক্রিপ্টটিকে ব্যাশ বংশগতভাবে মোড়ানো
আমি যতদূর জানি, এটি করার পক্ষে এটি নির্ভরযোগ্য ভাষা-অজ্ঞাতদৃষ্টির উপায়। এটি আর্গুমেন্টগুলি পাস করার অনুমতি দেয় এবং স্টিডিন সংরক্ষণ করে। ত্রুটিটি হ'ল দোভাষী তার পড়া ফাইলটির (আসল) অবস্থান জানেন না।
#!/bin/bash
exec python3 -O <(cat << 'EOWRAPPER'
print("PYTHON_SCRIPT_BEGINNING")
from sys import argv
try:
print("input() 0 ::", input())
print("input() 1 ::", input())
except EOFError:
print("input() caused EOFError")
print("argv[0] ::", argv[0])
print("argv[1:] ::", argv[1:])
print("__debug__ ::", __debug__)
# The -O option changes __debug__ to False
print("PYTHON_SCRIPT_END")
EOWRAPPER
) "$@"
কলিং echo -e 'aa\nbb' | /tmp/shebang 'arg1' 'arg2 contains spaces' 'arg3\ uses\ \\escapes\\'
প্রিন্টস:
PYTHON_SCRIPT_BEGINNING
input() 0 :: aa
input() 1 :: bb
argv[0] :: /dev/fd/62
argv[1:] :: ['arg1', 'arg2 contains spaces', 'arg3\\ uses\\ \\\\escapes\\\\']
__debug__ :: False
PYTHON_SCRIPT_END
নোট করুন যে প্রক্রিয়া প্রতিস্থাপন একটি বিশেষ ফাইল উত্পাদন করে। এটি সমস্ত এক্সিকিউটেবলের পক্ষে উপযুক্ত নয়। উদাহরণস্বরূপ, #!/usr/bin/less
অভিযোগ:/dev/fd/63 is not a regular file (use -f to see it)
জানি না ড্যাশ প্রক্রিয়া প্রতিস্থাপনের ভিতরে হেরেডোক রাখা সম্ভব কিনা।
আপনার স্ক্রিপ্টটিকে সাধারণ বংশানুক্রমে মোড়ানো
সংক্ষিপ্ত এবং সহজ, তবে আপনি stdin
আপনার স্ক্রিপ্ট থেকে অ্যাক্সেস করতে পারবেন না এবং এর জন্য কোনও স্ক্রিপ্টটি পড়তে এবং চালিত করতে দোভাষীর প্রয়োজন হয় stdin
।
#!/bin/sh
exec python3 - "$@" << 'EOWRAPPER'
print("PYTHON_SCRIPT_BEGINNING")
from sys import argv
try:
print("input() 0 ::", input())
print("input() 1 ::", input())
except EOFError:
print("input() caused EOFError")
print("argv[0] ::", argv[0])
print("argv[1:] ::", argv[1:])
print("__debug__ ::", __debug__)
# The -O option changes __debug__ to False
print("PYTHON_SCRIPT_END")
EOWRAPPER
কলিং echo -e 'aa\nbb' | /tmp/shebang 'arg1' 'arg2 contains spaces' 'arg3\ uses\ \\escapes\\'
প্রিন্টস:
PYTHON_SCRIPT_BEGINNING
input() caused EOFError
argv[0] :: -
argv[1:] :: ['arg1', 'arg2 contains spaces', 'arg3\\ uses\\ \\\\escapes\\\\']
__debug__ :: True
PYTHON_SCRIPT_END
অ্যাডক system()
কল ব্যবহার করুন তবে তর্ক ছাড়াই
সম্পাদিত ফাইলটির নামটি সঠিকভাবে পাস করে তবে আপনার স্ক্রিপ্টটি আপনি যে আর্গুমেন্টগুলি দিয়েছেন তা গ্রহণ করবে না। দ্রষ্টব্য যে আমি জানি কেবলমাত্র সেই ভাষাটি যার পরিচিতিদাতা উভয়ই ডিফল্টরূপে লিনাক্সটিতে ইনস্টল থাকে এবং কমান্ড লাইন থেকে তার নির্দেশাবলী ডিফল্টরূপে পড়ে।
#!/usr/bin/gawk BEGIN {system("python3 -O " ARGV[1])}
print("PYTHON_SCRIPT_BEGINNING")
from sys import argv
print("input() 0 ::", input())
print("input() 1 ::", input())
print("argv[0] ::", argv[0])
print("argv[1:] ::", argv[1:])
print("__debug__ ::", __debug__)
# The -O option changes __debug__ to False
print("PYTHON_SCRIPT_END")
কলিং echo -e 'aa\nbb' | /tmp/shebang 'arg1' 'arg2 contains spaces' 'arg3\ uses\ \\escapes\\'
প্রিন্টস:
PYTHON_SCRIPT_BEGINNING
input() 0 :: aa
input() 1 :: bb
argv[0] :: /tmp/shebang
argv[1:] :: []
__debug__ :: False
PYTHON_SCRIPT_END
system()
আপনার আর্গুমেন্টে ফাঁকা স্থান না থাকলে শুরুর দিকে 4.1+ কল ব্যবহার করুন
দুর্দান্ত, তবে কেবলমাত্র যদি আপনি নিশ্চিত হন যে আপনার স্ক্রিপ্টটি ফাঁকা স্থান যুক্তি দিয়ে কল করা হবে না। যেমন আপনি দেখতে পাচ্ছেন, ফাঁকা স্থানগুলি এড়ানো না হলে আপনার যুক্তিগুলি স্পেসে বিভক্ত হবে।
#!/usr/bin/gawk @include "join"; BEGIN {system("python3 -O " join(ARGV, 1, ARGC, " "))}
print("PYTHON_SCRIPT_BEGINNING")
from sys import argv
print("input() 0 ::", input())
print("input() 1 ::", input())
print("argv[0] ::", argv[0])
print("argv[1:] ::", argv[1:])
print("__debug__ ::", __debug__)
# The -O option changes __debug__ to False
print("PYTHON_SCRIPT_END")
কলিং echo -e 'aa\nbb' | /tmp/shebang 'arg1' 'arg2 contains spaces' 'arg3\ uses\ \\escapes\\'
প্রিন্টস:
PYTHON_SCRIPT_BEGINNING
input() 0 :: aa
input() 1 :: bb
argv[0] :: /tmp/shebang
argv[1:] :: ['arg1', 'arg2', 'contains', 'spaces', 'arg3 uses \\escapes\\']
__debug__ :: False
PYTHON_SCRIPT_END
4.1 নিচে awk সংস্করণ জন্য, আপনি, লুপ জন্য একটি ভিতরে স্ট্রিং সংযুক্তকরণের ব্যবহার উদাহরণস্বরূপ ফাংশন দেখতে হব আর https://www.gnu.org/software/gawk/manual/html_node/Join-Function.html ।