বাশ স্ক্রিপ্ট উত্স: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই


9

আমার একটি স্ক্রিপ্ট রয়েছে যা এর আগে শুরু হয়

#!/bin/bash
VALKYRIE=~/myProjects/valkyrie
source $VALKYRIE/cluster.conf

কিন্তু আমি যখন এটি চালায় এটি ফিরে আসে line 2: ~/myProjects/valkyrie/cluster.conf: No such file or directory

তবে ফাইলটি বিদ্যমান এবং আমি যখন source ~/myProjects/valkyrie/cluster.confএটি চালাচ্ছি তখন ঠিকঠাক হয়। কোন ধারণা? আমি VALKYRIEঅন্যত্র ভেরিয়েবল সেট করে রেখেছি তাই পথে হার্ড-কোড কোনও বিকল্প নয়।


আমি এটির সাহায্য করবে কিনা তা আমি 100% নিশ্চিত নই, তবে ~ এর মধ্যে স্পেস থাকলে ক্ষেত্রে আপনি ভেরিয়েবলটি সম্পূর্ণরূপে উদ্ধৃত করার চেষ্টা করতে পারেন ~ সুতরাং source "${VALKYRIE}/cluster.conf",।
স্পারহাক

না, এটি সাহায্য করে না।
খোই

1
আমি মনে করি এটি ~সঠিকভাবে প্রসারণ না করে কিছু করার । আমি যখন আপনার স্ক্রিপ্টটি ইচ্ছাকৃতভাবে জাল পথ দিয়ে চালাচ্ছি তখন ত্রুটিটি বলে না ~তবে পথটি প্রসারিত করে। আপনি কি ~আপনার স্ক্রিপ্টের সাথে সম্পূর্ণ পাথ দিয়ে প্রতিস্থাপনের চেষ্টা করতে পারেন ? এছাড়াও, একটি স্ক্রিপ্টে নিম্নলিখিত চালানোর চেষ্টা করুন echo ~
স্পারহাক

2
আপনি $HOMEপরিবর্তে চেষ্টা করতে পারে ~
স্পারহাক

3
@ খোই এটি ব্যাখ্যা করে। ~/.pam_environmentতাই এটা যেমন টিল্ড বিস্তার এবং প্যারামিটার সম্প্রসারণ সাধারণ জিনিষ আপনি একটি শেল থেকে আশা করতে চাই, কি না, তাই তন্ন তন্ন, একটি শেল স্ক্রিপ্ট নয় ~কিংবা $HOMEপ্রতিস্থাপন করা হবে। আপনি যদি সেই লাইনটি ~/.profileপরিবর্তে সরিয়ে নিয়ে যান export এবং সামনে যোগ করেন তবে এটি কাজ করা উচিত।
গিরিহা

উত্তর:


8

~সঠিকভাবে প্রসারিত হবে বলে মনে হচ্ছে না। যখন আমি আপনার স্ক্রিপ্টটি ইচ্ছাকৃতভাবে জাল পথ দিয়ে চালাব, ত্রুটিটি বলে না ~তবে পথটি প্রসারিত করে (যেমন /home/sparhawk/fakepathনা ~/fakepathYou $HOMEপরিবর্তে ~আপনি স্ক্রিপ্টের পরিবর্তে বা পুরো পথটি ব্যবহার করে চেষ্টা করতে পারেন) ।

( ~আপনার স্ক্রিপ্টটি আমার পক্ষে ভাল কাজ করার কারণে আমি কেন আপনার সিস্টেমে কাজ করে না তা নিশ্চিত )


আপনি যখন আদেশটি দেখান যে বাশ বিস্তৃতি সম্পাদন করে ( gnu.org/software/bash/manual/bashref.html# শেল- এক্সপেনশন ), আপনি দেখতে পাবেন যে পরিবর্তনশীল প্রসারণের আগে টিলড সম্প্রসারণ ঘটে । এই কারণেই ভেরিয়েবলের $HOMEচেয়ে ভাল~
গ্লেন জ্যাকম্যান

@glennjackman আমি নিশ্চিত যে আমি বুঝতে পেরেছি না। কেন ভেরিয়েবলের জন্য অগ্রাধিকারের বিষয় হবে ~?
স্পারহক

1
এটি হুবহু "অগ্রাধিকার" নয়, এটি প্রথমে আসে। বিবেচনা করুন x="~/.bashrc"; ls $x- "ls" কমান্ডের জন্য বিস্তারের ক্রমে, বাশ একটি টিলডের সন্ধান করে এবং একটিও খুঁজে পায় না; অবশেষে বাশ একটি পরিবর্তনশীল দেখে এবং এটি প্রসারিত করে। বাশ ফিরে যায় না এবং আবার টিল্ডসের সন্ধান করবে না, এই মুহুর্তে এটি কেবল একটি সরল চরিত্র। এবং বর্তমান ডিরেক্টরিতে কোনও ফাইল নেই যা টিলড দিয়ে শুরু হয়।
গ্লেন জ্যাকম্যান

আহ ঠিক আছে. আমি মনে করি এটি পেয়েছি। আমি সর্বদা ভাবছিলাম কেন এই আদেশটি ব্যর্থ হয় এবং x=~/".bashrc"; ls $xকাজ করে। তথ্যের জন্য ধন্যবাদ।
স্পারহাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.