ইউনিক্স কোন কমান্ড দ্বারা আবিষ্কার করা হোম ডিরেক্টরি পাথ যুক্ত করবেন?


12

আমি node.jsকাস্টম অবস্থানে ইনস্টল করেছি $PATHএবং .profileফাইলটিতে অবস্থানটি যুক্ত করেছি ।

$ node --version
v0.6.2
$ which node
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:~/Unix/homebrew/bin
$ cat ~/.profile
export  PATH="$PATH:~/Unix/homebrew/bin"

নোড.জেএস নিজেই ভাল চালায়। সমস্যাটি হ'ল এটি whichকমান্ড দ্বারা তালিকাভুক্ত নয় । সুতরাং আমি npmএখন ইনস্টল করতে পারবেন না । কারণ npmইনস্টল এর অবস্থানটি খুঁজে পায় না node.js। আমি কীভাবে nodeআবিষ্কার করে বাইনারি তৈরি করতে পারি which?

উত্তর:


11

এটি ঘটছে কারণ ~প্রসারিত হয়নি। আপনার শেল কীভাবে এটি মোকাবেলা করতে জানে, তবে whichতা নয় (না বেশিরভাগ অন্যান্য প্রোগ্রামগুলিও)। পরিবর্তে, করুন:

export "PATH+=:$HOME/Unix/homebrew/bin"

বিকল্পভাবে, ব্যবহার বন্ধ করুন whichএবং (প্রায় সর্বদা উচ্চতর) ব্যবহার করুন type -p

এখানে ইস্যুটির একটি প্রদর্শন রয়েছে:

$ echo "$PATH"
/usr/local/bin:/usr/bin:/bin
$ export "PATH+=:~/git/yturl"
$ yturl
Usage: yturl id [itag ...]
$ which yturl
$ type -p yturl
/home/chris/git/yturl/yturl
$ export "PATH=/usr/local/bin:/usr/bin:/bin:$HOME/git/yturl"
$ which yturl
/home/chris/git/yturl/yturl

মনে রাখবেন যে অন্যান্য কিছু প্রোগ্রাম যা দেখায় $PATHসেগুলির অর্থ বুঝতে পারে না ~এবং এটিকে কোনও আপেক্ষিক পথের অংশ হিসাবে গ্রহণ করে। এটি ব্যবহারের জন্য আরও পোর্টেবল $HOME


1
প্রস্তাবিত সমাধানটি কাজ করার সময়, ব্যাখ্যাটি ভুল। whichএখানে দোষ নেই; ~সংজ্ঞা প্রসারিত করা উচিত ছিল PATH। ব্যাশে একটি বিজোড়তা রয়েছে যা এটি ~যাইহোক প্রসারিত করে PATH, তাই দুটি ভুল একটি সঠিক, ধরণের তৈরি করে।
গিলস

@ গিলস কীভাবে আমি যা বলেছিলাম তার থেকে আলাদা?
ক্রিস ডাউন

এই যে উদ্ধৃত সঙ্গে আদৌ কাজ করে ~তা একটি বাশ বৈষম্য। আক্ষরিক ~এটি থাকার $PATHফলে লাইনটি সমস্যার কারণ হতে পারে কারণ এমন প্রোগ্রাম রয়েছে যা তাদের নিজস্ব বিভাজন করে $PATHএবং তারা ~বিশেষভাবে আচরণ করে না ।
গিলস 'দু: খিত হওয়া বন্ধ করুন'

@ গিলিস ... এবং আমি আমার চূড়ান্ত অনুচ্ছেদে যা বলেছিলাম তার থেকে কীভাবে এটি আলাদা?
ক্রিস ডাউন

1
যদিও এটি প্রযুক্তিগতভাবে সত্য যে "কিছু অন্যান্য প্রোগ্রাম ... এর অর্থ বুঝতে পারে না ~", আপনার বাক্যটি বিভ্রান্তিকর। প্রসঙ্গে $PATH, এটি বাশ ব্যতীত প্রতিটি প্রোগ্রাম।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

18

আপনার লাইনটি .profileএকটি হওয়া উচিত

export  PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH=$PATH:$HOME/Unix/homebrew/bin
PATH=$PATH:~/Unix/homebrew/bin

~চরিত্রটি কেবল তখন আপনার বাড়ির ডিরেক্টরিতে প্রসারিত হয় যখন এটি কোনও শব্দের প্রথম অক্ষর এবং এটি অবরুদ্ধ। আপনি যা লিখেছেন তাতে ~দ্বিগুণ উদ্ধৃতিগুলির মধ্যে এবং তাই প্রসারিত নয়। এমনকি আপনি লিখলেও export "PATH=$PATH:"~/Unix/homebrew/bin, এটি ~প্রসারিত হবে না কারণ এটি শেল শব্দের শুরুতে নয়।

একটি বিশেষ বিভাজন রয়েছে, যা এর জন্য PATHএবং অনুরূপ ভেরিয়েবলের মান লিখতে । যদি ~একটি সমান চিহ্নের পরে থাকে যা একটি অ্যাসাইনমেন্ট চিহ্নিত করে, বা যদি কোনও অ্যাসাইনমেন্টের ডান হাতের ~ঠিক পরে থাকে :তবে এটি প্রসারিত হয়। কেবল সরল অ্যাসাইনমেন্টে এই সরবরাহ রয়েছে, export PATH=…গণনা করা হয় না (এটি exportবিল্টিনের কাছে একটি কল , যার মধ্যে একটি =চরিত্র রয়েছে এমন একটি যুক্তি রয়েছে )।

এখানে, আপনাকে রফতানি করার দরকার নেই PATHকারণ এটি ইতিমধ্যে রফতানি হয়েছে। exportযখন আপনি একটি ভেরিয়েবলের মান পরিবর্তন করেন তখন আপনাকে কল করার দরকার নেই (ওএসএক্স বা লিনাক্সে পুরানো বোর্ন শেলগুলি পাবেন না যা বাদে)। এছাড়াও, একটি অ্যাসাইনমেন্টে (আবার, exportগণনা করা হয় না), আপনার ডান হাতের চারপাশে ডাবল কোট লাগবে না, তাই ফাঁকা স্থান PATH=$PATH:~/Unix/homebrew/binথাকলেও নিরাপদ $PATH

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.