আমি নিম্নলিখিত স্ক্রিপ্ট চালাচ্ছি:
VAR="Test"
sh -c 'echo "Hello $VAR"'
তবে আমি পেয়েছি:
# ./test.sh
Hello
আমি কীভাবে VAR
আমার স্ক্রিপ্টের পরিবর্তনশীলটি তৈরি করা শেলটিতে প্রেরণ করতে পারি sh -c '...'
?
আমি নিম্নলিখিত স্ক্রিপ্ট চালাচ্ছি:
VAR="Test"
sh -c 'echo "Hello $VAR"'
তবে আমি পেয়েছি:
# ./test.sh
Hello
আমি কীভাবে VAR
আমার স্ক্রিপ্টের পরিবর্তনশীলটি তৈরি করা শেলটিতে প্রেরণ করতে পারি sh -c '...'
?
উত্তর:
হয় export
এটিকে পরিবেশের ভেরিয়েবলে পরিণত করতে ব্যবহার করুন , অথবা সরাসরি কমান্ডে প্রেরণ করুন।
VAR="Test" sh -c 'echo "Hello $VAR"'
VAR="Test"
export VAR
sh -c 'echo "Hello $VAR"'
শেল কোডের চারপাশে দ্বিগুণ উদ্ধৃতি ব্যবহার করা থেকে বিরত থাকুন যাতে এটি কমান্ড ইঞ্জেকশন দুর্বলতার পরিচয় দেয়:
sh -c "প্রতিধ্বনি 'হ্যালো $ VAR'"
পুনরায় বুট করার কারণ যদি $VAR
এমন কিছু থাকে তখন ডাকা হয়';reboot #
export var="Test"
এক লাইনেও করতে পারেন ।
এখানে ভেরিয়েবলগুলি পাস করার আরও একটি উপায় sh -c
(অবস্থানগত আর্গুমেন্ট হিসাবে):
{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
$@
প্রত্যাশিত হিসাবে কাজ করার অনুমতি দেবে , যেমন। sh -c 'echo "Hello $@"' _ "$VAR" "$VAR2"
`
$0
শেলের দ্বারা ত্রুটি / সতর্কতা বার্তায় প্রদর্শিত হয়।
আপনি যদি এটিকে পরিবেশের ভেরিয়েবল হিসাবে রফতানি করতে না চান তবে এখানে একটি কৌশল আপনি করতে পারেন। আপনার ভের্যাব সংজ্ঞাটি একটি ফাইলে সংরক্ষণ করুন .var_init.sh
এবং এটি আপনার সাব-শেলটিতে এটি উত্স করুন:
.var_init.sh
VAR="Test"
কমান্ড লাইন থেকে:
sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'
এইভাবে, আপনি কেবল আপনার সাব-শেল কার্যকর করার সময় আপনার ভেরিয়েবলগুলি সেট করেছেন।
ENV=.var_ini.sh sh -c '...'
.var_init.sh
বর্তমান ডিরেক্টরিটিতে $PATH
এটির . ./var_init.sh