টিলড, `~ কে আপেক্ষিক পথ হিসাবে বিবেচনা করা হয়?


35

আমি এনভিডিয়া চুদা লাইব্রেরি ইনস্টলারটির বিভিন্ন অংশ বের করার চেষ্টা করছি। আমি নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

mkdir ~/Downloads/nvidia_installers
./cuda_6.5.14_linux_64.run -extract=~/Downloads/nvidia_installers

এবং আমি নিম্নলিখিত বার্তাটি পেয়েছি:

ERROR: extract: path must be absolute.

এবং আমি যখন আমার বাড়ির আক্ষরিক ঠিকানা দিয়ে কমান্ডটি টাইপ করি তখন এটি পুরোপুরি কার্যকর হয়।

./cuda_6.5.14_linux_64.run -extract=/home/likewise-open/XXX/username/Downloads/nvidia_installers

আমি বিভ্রান্ত হয়েছি ~ / হোম / একইভাবে খোলা / এক্সএক্সএক্স / ইউজারনেমটির মতো হওয়া উচিত নয়?

পরিক্ষিত:

./cuda_6.5.14_linux_64.run -extract=$HOME/Downloads/nvidia_installers

এবং এটি কাজ করে, তবে কেন এটি অনুমতি দেয় না জানি না ~


2
সম্পর্কিত: "একটি" টিল্ড-উপসর্গ "একটি শব্দের শুরুতে একটি অব্যক্ত <টিলেডি> চরিত্র নিয়ে গঠিত এবং তারপরে প্রথম অব্যক্ত সমস্ত চরিত্র অনুসরণ করা হয়"
ব্রেইম

উত্তর:


47

বাশ কেবল একটি প্রসারিত করে - যদি এটি কোনও শব্দের শুরু হয়। আপনি নিম্নলিখিত কমান্ডের মধ্যে এটি দেখতে পারেন:

$ echo -extract=~/test
-extract=~/test

oli@bert:~$ echo -extract ~/test
-extract /home/oli/test

বাশ একক ~অক্ষর এবং ~/এই বিকল্পের জন্য সন্ধান করে। অন্য কোনও সমন্বয় বা উদ্ধৃত সংস্করণ কাজ করবে না।

$HOMEপরিবর্তনশীল বিকল্পগুলি আরও শক্তিশালী হওয়ায় কাজ করে (এটি $একটি বিশেষ চরিত্র যেখানে ~খুব কম তাই):

$ echo Thisisastring${HOME}awrawr
Thisisastring/home/oliawrawr

আমরা যখন কথা বলছি ~, এর আসলে আরও কিছু দম্পতি ব্যবহার করেছে:

  • ~+বর্তমান ওয়ার্কিং ডিরেক্টরি (পড়া থেকে $PWD)
  • ~-পূর্ববর্তী ওয়ার্কিং ডিরেক্টরি (থেকে পড়া $OLDPWD)

সাধারণ হিসাবে ~, এগুলি শেষে অতিরিক্ত পাথগুলি প্যাকেজ করতে পারে এবং আবার এগুলি একটি শব্দের উপসর্গ হতে হবে বা বাশ সেগুলি উপেক্ষা করবে।

আপনি এই সম্পর্কে আরও পড়তে পারেন man bash | less -p ' Tilde'


2
এটা যে মূল্য হয় zsh না (বরং বা করার জন্য কনফিগার করা যাবে) প্রসারিত ~পর =খুব। অন্যান্য সুবিধাজনক উন্নতির মধ্যে এটির ওভার ব্যাশ রয়েছে।
জানু হুডেক

@ জানহুদেক না - এটি আরও জটিল; এটি পরে প্রসারিত সম্পর্কে নয় =; এটি ডান দিকের প্রারম্ভিক প্রান্তে প্রসারিত সম্পর্কে পিএফ একটি পরিবর্তনশীল অ্যাসাইনমেন্ট। কাছ থেকে দেখার সময় এটি আমাদের কেসকে আরও বিভ্রান্ত করে তোলে - আমার উত্তর দেখুন see এবং zshএ থেকে পৃথক নয় bash; 'Zsh' এর বর্ণনাটি কিছুটা রহস্যজনক: info --subnodes zsh | less +/'14.7.4 Notes'(zsh ম্যান পেজগুলি অনুপস্থিত)
ভলকার সিগেল

1
@ ভোলকারসিগেল: zshঅত্যন্ত কনফিগারযোগ্য। আমার zsh echo -extract=~/testফলাফল -extract=/home/user/test। এটি MAGIC_EQUAL_SUBSTবিকল্প দ্বারা সক্ষম করা হয়েছে । পার্শ্ব-নোটে, আমার কাছে সমস্ত zsh ম্যান পেজ ঠিক আছে।
জান হুডেক

@ জানহুদেক zshকনফিগারযোগ্য - এবং অন্যান্য উন্নতি সম্পর্কে সন্দেহ নেই ; আমি আশা করতাম যে MAGIC_EQUAL_SUBST (14.7.4 এ আচ্ছাদিত) ডিফল্টরূপে আনসেট করা আছে এবং খুব কমই ব্যবহৃত হয়; এখন, আপনি যদি এটি সাধারণভাবে সক্ষম করে থাকেন তবে তা স্পষ্টতই আরও প্রাসঙ্গিক। আমার উদাহরণ বিভাগটি ভাল আকারে পাওয়ার পরে, এটি একটি দুর্দান্ত সংযোজন করবে ...
ভলকার সিগেল

@ জানহুদেক zsh ম্যান পেজ সম্পর্কে, তারা উবুন্টু প্যাকেজগুলি থেকে কিছু সময়ের জন্য অনুপস্থিত ছিল, ইঙ্গিতটির জন্য ধন্যবাদ, জানেন না যে এটি স্থির হয়েছে; বাগের দিকে তাকাতে, এটি ইউটোপিকের জন্য স্থির, তবে নির্ভরযোগ্য নয় - এটি এটি ব্যাখ্যা করে! ( লঞ্চপ্যাড: সমস্ত zsh ম্যানপেজ এবং ইনলাইন সাহায্যের ফাইল নিখোঁজ এবং এউ: zsh মানুষ নিখোঁজ ... )
ভলকার সিগেল

19

শুধু এটি ঠিক করা

এই কমান্ডটি একটি ত্রুটি বার্তা "ERROR: এক্সট্রাক্ট: পাথ অবশ্যই পরম হতে হবে" দেখায়:

./cuda_6.5.14_linux_64.run -extract=~/Downloads/nvidia_installers

ত্রুটিটি সহায়ক নয় - প্রোগ্রামামটি ইতিমধ্যে খুব বিভ্রান্ত হয়েছিল।
আপনি ইতিমধ্যে জানেন যে ত্রুটিটি এর থেকে রয়েছে ~, কারণ এটি $HOMEপরিবর্তে কাজ করে।

সমস্যা: ~কেবল একটি শব্দের শুরুতে প্রতিস্থাপন করা হয়।

উদাহরণস্বরূপ, এটি টিলডের সাথে কাজ করে:

echo -extract ~/Downloads

আপনার যদি বাক্সের বিকল্প বাক্যাংশের প্রয়োজন হয় তবে এর =পরিবর্তে OME HOME ব্যবহার করা ~সবচেয়ে পরিষ্কার সমাধান;

echo -extract=$HOME/Downloads

অনুশীলন

আপনার যা জানা উচিত:

~একটি শব্দের শুরুতে না হয়ে যখন গেমগুলি প্রসারিত হয় সেখানে বিশেষ ক্ষেত্রে রয়েছে : ভেরিয়েবল অ্যাসাইনমেন্টের অংশ হিসাবে, সরাসরি পরে =। যা অবশ্যই এখানে বিভ্রান্তিকর।

PATH এর মতো ভেরিয়েবলগুলির সাথে ব্যবহারের জন্য এটি অন্যান্য গুরুত্বপূর্ণ বিশেষ ক্ষেত্রে। চলক কার্যক্রমে, প্রথমটির মতো পরেও ~প্রসারিত হয় ।:=

$ dir=~ sh -c 'echo D2: $dir'
D2: /home/user
$ sh -c 'echo D2: $dir' dir=~
D2: 
$ echo Dir: $dir
Dir:
$ dir=~; sh -c 'echo D2: $dir'
D2: 
$ echo Dir: $dir
Dir: /home/user
$ sh -c 'echo D2: $dir'; d3=~
D2: 
$ echo d3: $d3
d3: /home/user

টিলডের অর্থ

একটি শেল, ~টিল্ড আসলে একটি পথ নয়। এটি কেবল কোনও পথ দ্বারা প্রতিস্থাপন করা হয় $HOME, কিছু সময়।

এটি শর্টহ্যান্ড, বা সংক্ষিপ্তসার মতো কিছু যা শেল সরবরাহ করে।
এটি সাধারণভাবে কোনও পথের মতো ব্যবহার করা যায় না, শেলটি এটি কেবল খুব বিশেষ জায়গায় কোনও পাথে "প্রসারিত" করে।
এমনকি এটি প্রসারিত হলেও, এটি হোম ডিরেক্টরি ছাড়া অন্য কোনও কিছুর জন্য হতে পারে।

  • এটি কেবল একটি শব্দের শুরুতে বা একটি বা পরে চলক কার্যক্রমে প্রসারিত হয়:=
  • এটি কেবল প্রসারিত হয় যদি এটি উদ্ধৃতিগুলির মধ্যে না থাকে
  • এটি কেবল তখনই প্রসারিত হবে $HOMEযদি ক এর আগে শব্দের কোনও অক্ষর না থাকে/

কমান্ড লাইনে সমস্যা

এই অনুসারে, আপনার কমান্ডের সমস্যাটি হ'ল টিল্ড ইন

-extract=~/Downloads/nvidia_installers

এটি প্রসারিত নয়, কারণ এটি তালিকাভুক্ত কেসের একটি নয় not এখানেই শেষ.

সমাধানটি হ'ল টিল্ডকে শব্দের প্রথম অযোগ্য অক্ষর তৈরি করা, অন্য কোনও চরিত্রের সাথে পরবর্তী কোনও চিহ্ন নেই /- বিকল্পের যুক্তির আগে কোনও স্থানের সাথে কোনও বিকল্প ব্যবহার করার সময় আপনি কেবল এটি পাবেন:

-extract ~/Downloads/nvidia_installers

$HOMEপরিবর্তে আরেকটি সমাধান ব্যবহার করা হবে। একটি স্ক্রিপ্টে, এটি সাধারণত আরও ভাল পছন্দ।

-extract=$HOME/Downloads/nvidia_installers

ত্রুটি বার্তা

কিন্তু ত্রুটি বার্তাটি কীভাবে হয়
"ERROR: extract: path must be absolute."?
এই সব মধ্যে ফিট?

আমরা জানি যে টিল্ডটি প্রসারিত হয়নি। এর মানে হল যে প্রোগ্রামটি যুক্তিসঙ্গত পাঠ্য সহ পেয়েছে ~, তবে /home/auserসেই পথ হিসাবে। সেই পথটি ~/Downloads/nvidia_installers- তবে এখন কোনও শেল নেই, তাই টিলডের কোনও বিশেষ অর্থ নেই। এটি একটি সাধারণ ডিরেক্টরি নাম name এবং ফর্মের অন্যান্য প্রতিটি পথের মতো foo/bar/bazএটিও একটি আপেক্ষিক পথ

অন্যান্য ব্যবহার

উপরের অন্যান্য সমস্ত বিধি প্রয়োগের সাথে ~যেমন এর পরেও অক্ষরগুলি থাকে ~alice- এবং সেখানে একটি ব্যবহারকারীর নাম রয়েছে aliceযা তার aliceপরিবর্তে হোম ডিরেক্টরিতে প্রসারিত হবে, বলুন home/alice
এছাড়াও, যদি আপনি bob, ~প্রসারিত হবে /home/bob, এবং ~bobএকই প্রসারিত হবে।

বৈকল্পিকটি ~+বর্তমান ডিরেক্টরিতে প্রসারিত হয়েছে,$PWD

পূর্ববর্তী ডিরেক্টরি, যেখানে আপনি শেষ পূর্বে ছিল উল্লেখ করতে cd, আপনি ব্যবহার করতে পারেন ~-, যা প্রসারিত হয় $OLDPWD

আপনি যদি ব্যবহার করেন pushdএবং popdপরিবর্তে cd, আপনি ইতিমধ্যে জানবেন যে ডিরেক্টরি স্ট্যাকের মতো অ্যাক্সেস করা যেতে পারে ~-2

বিস্তারিত

সমস্ত ক্ষেত্রে যেখানে ~কোনও পথে প্রসারিত হয় সেগুলি শেল দ্বারা পরিচালিত হয় । অন্যান্য প্রোগ্রামগুলির জন্য, ~কেবলমাত্র একটি সাধারণ ফাইলনাম অক্ষর।

শেলের অভ্যন্তরের সঠিক সংজ্ঞাটির জন্য , এখানে নোটের প্রাসঙ্গিক বিভাগটি উল্লেখ করা হয়েছে যে কতগুলি ক্ষেত্রে কেবল একটি বিশেষ কেস দ্বারা প্রতিস্থাপন করা হয়েছে : "এই লগইন নামটি যদি নাল স্ট্রিং হয় তবে শিল প্যারামিটার হোমের মান দিয়ে টিল্ড প্রতিস্থাপন করা হবে। " :man bash
~$HOME

Tilde Expansion
    If a word begins with an unquoted tilde character (`~'), all of the charac‐
    ters  preceding the first unquoted slash (or all characters, if there is no
    unquoted slash) are considered a tilde-prefix.  If none of  the  characters
    in  the tilde-prefix are quoted, the characters in the tilde-prefix follow‐
    ing the tilde are treated as a possible login name.  If this login name  is
    the  null string, the tilde is replaced with the value of the shell parame‐
    ter HOME.  If HOME is unset, the home directory of the user  executing  the
    shell is substituted instead.  Otherwise, the tilde-prefix is replaced with
    the home directory associated with the specified login name.

    If the tilde-prefix is a `~+', the value of the shell variable PWD replaces
    the  tilde-prefix.   If  the tilde-prefix is a `~-', the value of the shell
    variable OLDPWD, if it is set, is substituted.  If the characters following
    the tilde in the tilde-prefix consist of a number N, optionally prefixed by
    a `+' or a `-', the tilde-prefix is replaced with the corresponding element
    from  the  directory  stack,  as  it would be displayed by the dirs builtin
    invoked with the tilde-prefix as an argument.  If the characters  following
    the  tilde in the tilde-prefix consist of a number without a leading `+' or
    `-', `+' is assumed.

    If the login name is invalid, or the tilde expansion  fails,  the  word  is
    unchanged.

    Each variable assignment is checked for unquoted tilde-prefixes immediately
    following a : or the first =.  In these cases, tilde expansion is also per‐
    formed.   Consequently, one may use filenames with tildes in assignments to
    PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.

3

~প্রতি সেয়ে কোনও পথ নয়। এটি এমন একটি চরিত্র যা শেল থেকে বিশেষ চিকিত্সা পায় যেখানে ~বা তার ~/অর্থ "বর্তমান ব্যবহারকারীর হোম ডিরেক্টরি পথের সাথে প্রতিস্থাপন করুন"। ~usernameএর অর্থ "ব্যবহারকারীর হোম ডিরেক্টরি ডিরেক্টরিটি প্রতিস্থাপন করুন"।

কারণ এটি কোনও পথ নয়, এটি কেবলমাত্র কমান্ডের নির্দিষ্ট জায়গাগুলিতে স্বীকৃত (নতুন স্পেস-স্প্লিট টোকেনের প্রথম চরিত্র হিসাবে)।

যখন প্রসারিত হয়, এটি একটি পরম পথ দিয়ে প্রতিস্থাপিত হয়।

$HOMEকাজগুলি ব্যবহার করা হচ্ছে কারণ হোম কেবল শেলের দ্বারা সেট করা একটি চলক এবং পরিবর্তনশীল প্রতিস্থাপনের জন্য সাধারণ শেল নিয়ম অনুসরণ করে (ফাঁকা জায়গায় ইনপুট বিভক্ত হওয়ার আগে এবং সম্পাদিত হওয়ার আগে এটি ঘটে)।


1

আপনি সঠিক. home / ডাউনলোডগুলি / home / ব্যবহারকারীর নাম / ডাউনলোডের সমান।

কিছু ইনস্টলার এবং এক্সট্র্যাক্টরগুলি যেখানে জিনিস রাখার প্রয়োজন তা খুব আকর্ষণীয়। আমি মনে করি এটি হতে পারে কারণ এটি ফাইলপথগুলিতে লগ করে এবং লগগুলি স্বীকৃত পথে ~

আমি পরিবর্তে / হোম / ব্যবহারকারীর নাম টাইপ করতে অভ্যস্ত হয়েছি। :)

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