আমি বলব এটি হ'ল, যখন বাশ আপনার / বিন / শ হয়। এটি বোর্ন শেলের একটি বৈশিষ্ট্য নয় এবং আমি বাজি ধরছি এটি পসিক্স শেলের কোনও বৈশিষ্ট্য নয়, বাস্তবে তারা এটিকে স্পষ্টভাবে নিষিদ্ধ করতে চাইবে।
নামটি থাকা সত্ত্বেও বাশ একটি বোর্ন শেলের তুলনায় সত্যই বেশি পরিমাণে কর্ন ডেরিভেটিভ শেল এবং এটির বৈশিষ্ট্যযুক্ত একমাত্র কর্নের মতো কার্ন এবং আমার মতে এটি কিচেনসিঙ্ক বৈশিষ্ট্য যার কোনও ব্যবহারিক গুণ নেই। বিকাশকারীরা যারা বোর্ন বৈশিষ্ট্যগুলি যেমন বর্ন শেল, পসিক্স শেল বা আধুনিক শেলগুলির প্রচলিত, বা অন্য কথায়, ভাল অভ্যাসে প্রতিশ্রুতিবদ্ধ এবং স্ট্যান্ডার্ড আইডিয়োমগুলি ব্যবহার করে, তাদের সফ্টওয়্যার চালু থাকে তখন স্তম্ভিত হয়ে যায় like লিনাক্স এবং ম্যাক এবং এখন সম্ভাব্যভাবে দুর্বল, যেহেতু শোষণ লেখকরা তাদের উদ্দেশ্য সত্ত্বেও 'বাশিজম' ব্যবহার করতে পারেন। যতটা উন্নত সুসংগততা, যখন / কর্ন শেল ডেরিভেটিভসের উপরে / বিন / শ হিসাবে আহ্বান করা হয়, কেবল তখনই যদি / বিন / শ আপনার লগইন শেল, বা ইন্টারেক্টিভ শেল হয়, যখন বাশ কোনও বোর্ন শেলের মতো আচরণ করে, কার্ন শেলের তুলনায়,
আমি আপনাকে প্ররোচিত করার চেষ্টা করব যে এটি 2 টি কেস সহ রান্নাঘর-সিংকের বৈশিষ্ট্যযুক্ত: আপনি একটি এম্বেডড দেব, যিনি রাউটারের মতো ডিভাইস তৈরি করেন, নেটওয়ার্ক-সংযুক্ত-স্টোরেজ 1 ম বড় এনভি, মানে আরও বেশি, স্মৃতি, তাই, আরও ব্যয়, এত কম লাভ, সুতরাং, যদি এটি বাশের এই বৈশিষ্ট্যটি ব্যবহার করার বিষয়টি বিবেচনা করার কারণ ছিল, আপনি কি পরিবর্তে FPATH এবং অটোলোড, ksh88 বৈশিষ্ট্যগুলি ব্যবহার করবেন না? পরিবর্তে পরিবেশে বাইট জন্য পুরো ফাংশন বাইট পাস? এমনকি আপনি পার্সিং এবং পরিবেশকে ছাঁটাই করার বিষয়টি বিবেচনা করতে পারেন, এটি শেলসক্রিপ্টে পাওয়ার আগে এটি কেবলমাত্র filter $ (। *) Filter ফিল্টার আউট এবং এর মতো ...
এটি এ সম্পর্কে অনন্য কি তা আন্ডারস্কোর করে, ভেরিয়েবলটি কী তা বিবেচনা করে না, এবং স্ক্রিপ্টটিকে ভেরিয়েবলটি উল্লেখ করতে বা ব্যবহার করতে হয় না, এটি এখনও ঝুঁকিপূর্ণ হতে পারে।
#!/bin/sh
exec /usr/local/myapp/support/someperlscript.pl
সূর্যের নীচে অন্য যে কোনও কিছুর জন্য উপরেরটি পার্ল স্ক্রিপ্টের মতোই নিরাপদ হওয়া উচিত, আপনি কোনও ভেরিয়েবল ব্যবহার করছেন না কীভাবে আপনি কোনওটি ভুল করে দিতে পারবেন? পরিবর্তন করা হচ্ছে
#!/bin/bash -norc
exec /usr/local/myapp/support/someperlscript.pl
হয়ও সাহায্য করে না, এর ENV বা এর মতো কোনও কিছুর সাথে কিছুই ছিল না - সকলেই পুড়ে যায় কারণ বাশকে অনন্য হওয়া দরকার। আসলে ব্যাশ সংস্করণ 2 ইস্যু আছে যা আমার কাছে প্রমাণ করে যে কেউ কখনো এই বৈশিষ্ট্যটি ব্যবহার করে , তাদের অ্যাপ্লিকেশনের জন্য কারণ অন্যথায় এটি করা উচিত নয় প্রায় lurked আছে এই দীর্ঘ। এবং সবচেয়ে খারাপ এটি মূলত এই বৈশিষ্ট্যটিকে এড়ানো হচ্ছে না । এখানে এর সাথে একটি উদাহরণ রয়েছে: 'সু -' দিয়ে, যা আপনি যদি কাউকে জিজ্ঞাসা করেন তবে তার ব্যাখ্যাটি পরিবেশটি বাতিল করে দেয়, ম্যান পৃষ্ঠাটি পরীক্ষা করে দেখুন এবং আপনি কেবল 99.9% পেয়ে যাবেন। আমি যে সঠিক ভাবে পরীক্ষিত, উপর থেকে এই সিস্টেম / বিন / SH root এর লগ-ইন শেল, এবং / বিন / SH ব্যাশ হয় কিন্তু , এই উদাহরণে আমি চেষ্টাআমার .বাশ_ প্রোফাইলে শক্ত করতে। আমি আমার বিদ্যমানটিকে মূলের জন্য নামকরণ করলাম (যা সক্ষম) তবে আমার চিন্তা ছিল যদি su হয়, তবে সম্ভবত সুডো যাই হোক না কেন, আমি এটিতে পরিবর্তিত হয়েছি:
exec env -i TERM=vt102 LOGNAME=root USER=root HOME=/var/root /bin/ksh -i
সুতরাং, আমি প্রকৃতপক্ষে পরিবেশটিকে পুরোপুরি টস করছি, এবং একটি ন্যূনতম এনভির ব্যবহার করব এবং তারপরে বর্তমান প্রক্রিয়াটির স্থলে একটি শেল চালাচ্ছি যা সমস্যা হওয়া উচিত নয়। তারপরে আদর্শ উদাহরণের জায়গায় চেষ্টা করুন:
%dock='() { echo -e "\e[2t\c"; echo dockshock;} ; dock' su
এটি নির্দিষ্ট করে যে কোনও নির্দিষ্ট ফাংশনকে বিশ্লেষণ করার সাথে এর কোনও যোগসূত্র নেই এবং একটি শোষণটি ফাংশনটি উল্লেখ ও ব্যবহার করতে পারে। আপনি যদি রুট ইত্যাদি পরীক্ষা করার জন্য যুক্তিযুক্ত ফাংশনটি কল্পনা করতে পারেন এই ক্ষেত্রে, এটি কেবলমাত্র একটি পাল্টানো ক্রম ব্যবহার করে টার্মিনাল উইন্ডোটি আইকনফিটেড বা ডক করার জন্য একটি ফাংশন, এটি বেশ মানক, তাই আমি ডিকনফাইটি ক্লিক করার পরে, আমি ডকশক দেখুন - কিন্তু, তাই কি? এখন এটি চেষ্টা করুন:
%TERM='() { echo -e "\e[2t\c"; echo dockshock;} ; TERM' su -
এবং কি অনুমান? জানালাটি চুষতে থাকে ডকে into এটি পরে দেখতে কেমন লাগে তা এখানে ..
%TERM='() { echo -e "\e[2t\c"; echo dockshock;} ; TERM' su -
Password:
dockshock
# env
_=/usr/bin/env
HOME=/var/root
LOGNAME=root
TERM=vt102
USER=root
# echo $0
/bin/ksh
#
তো, তাই, তার জন্য অনেক কিছু! এক্সপোর্ট করা ফাংশনগুলির আসলে আরসি স্ক্রিপ্টগুলির চেয়ে অগ্রাধিকার থাকে। আপনি এটি ডজ করতে পারবেন না।