পাথনামে ফাঁক দিয়ে ডিরেক্টরিতে সিডি করতে স্ক্রিপ্ট চাপুন Bash


96

আমি ম্যাকোস এক্স-তে ব্যাশ ব্যবহার করছি এবং আমি একটি সাধারণ এক্সিকিউটেবল স্ক্রিপ্ট ফাইল তৈরি করতে চাই যা এটি যখন চালানো হয় তখন অন্য ডিরেক্টরিতে পরিবর্তিত হয়। যাইহোক, সেই ডিরেক্টরিতে যাওয়ার পথটিতে ফাঁকা জায়গা রয়েছে। আপনি কিভাবে এই হ্যাক? এটাই আমার কাছে ...

ফাইলের নাম: cdcode

ফাইল সামগ্রী:

cd ~/My Code

এখন মঞ্জুর হয়েছে, এটি দীর্ঘ পথের নাম নয়, তবে আমার আসল পথের নামটি পাঁচটি ডিরেক্টরি গভীর এবং those ডিরেক্টরিগুলির মধ্যে চারটির পাথের ফাঁক রয়েছে।

বিটিডাব্লু, আমি চেষ্টা করেছি cd "~/My Code"এবং cd "~/My\ Code"এগুলির কোনওটিই কাজ করে নি।


4
আমার বর্ণিত হিসাবে একই ধরণের সমস্যা হচ্ছে। উদাহরণস্বরূপ ডিরেক্টরিতে পরিবর্তনের সম্ভাব্য উপায়গুলির কোনওটিতেই এর স্থান নেই। এর মতো কিছুই নয়: সিডি "আমার পাসপোর্ট" সিডি আমার \ পাসপোর্ট সিডি আমার "পাসপোর্ট" কিছুই কাজ করছে না। কমপ্লিটেশন ভাল কাজ করে। আমি তালিকা করতে পারি: ls -l আমার \ পাসপোর্ট / সূক্ষ্ম কাজ করে। un> আনামে -এ লিনাক্স হোস্ট 2.6.18-8.1.8.el5.centos.plus # 1 এসএমপি সোম 16 জুলাই 08:49:50 ইডিটি 2007 i686 i686 i386 জিএনইউ / লিনাক্স \> বাশ --help জিএনইউ ব্যাশ, সংস্করণ 3.1 .17 (1) -রিলেজ- (i686-redhat-linux-gnu) কোন ধারণা দয়া করে?
ডেনিস সি

উত্তর:


81

আপনি যখন কোনও পাথ দ্বিগুণ করেছেন, আপনি টিলডের সম্প্রসারণ বন্ধ করছেন। সুতরাং এটি করার কয়েকটি উপায় রয়েছে:

cd ~/"My Code"
cd ~/'My Code'

টিলড এখানে উদ্ধৃত করা হয়নি, তাই টিল্ড সম্প্রসারণ চালানো হবে।

cd "$HOME/My Code"

আপনি ডাবল-কোটেড স্ট্রিংয়ের মধ্যে পরিবেশের পরিবর্তনগুলি প্রসারিত করতে পারেন; এটি মূলত টিলডে সম্প্রসারণ করছে

cd ~/My\ Code

আপনি ব্যাকস্ল্যাশ সহ বিশেষ অক্ষর (যেমন স্থান) থেকেও পালাতে পারেন।


4
আপনি এমনকি সিড My / মাই '' কোডটিও করতে পেরেছিলেন, তবে এটি নির্বোধ হবে যখন আপনি এর পরিবর্তে ব্যাকস্ল্যাশ দিয়ে এড়াতে পারবেন
নিক ডিকসন

42

আমি এই পৃষ্ঠায় নীচের সমাধানটি পেয়েছি :

x="test\ me"  
eval cd $x

একটি সংমিশ্রণ \একটি ডবল উদ্ধৃত পাঠ্য ধ্রুবক এবং একটি evalসামনে cdকরে তোলে একটি যাদুমন্ত্র মত কাজ!


আরও স্পষ্টতা: স্ক্রিপ্টের কোনও ফাইলের ডিরেক্টরিতে সিডি করার জন্য: DIR = $ (dirname "$ 0"); ইভল সিডি $ ডিআইআর
মাইকেল স্কট কুথবার্ট

4
এটি একটি OS X মেশিনে ব্যাশ-স্ক্রিপ্ট চালানোর জন্য আমার পক্ষে সত্যই সহায়তা করেছে। 🎉
timbillstrom

এখানে সত্যিই কোন প্রয়োজন evalনেই।
বেনিয়ামিন ডাব্লু।

4
ওএস এক্স-এ, আমি ছাড়া কাজ করার জন্য অন্যান্য / পূর্ববর্তী উত্তরগুলি পেতাম না eval
ডি উডস

11

একই সমস্যার সাথে লড়াই করার পরে, আমি দুটি ভিন্ন সমাধান চেষ্টা করে যা কাজ করে:

1. ""আপনার ভেরিয়েবলগুলির সাথে ডাবল কোট ( ) ব্যবহার করুন ।

পূর্বের উত্তরে নির্দেশিত হিসাবে সবচেয়ে সহজ উপায় কেবল আপনার ভেরিয়েবলগুলি ডাবল করে:

cd "$yourPathWithBlankSpace"

2. ব্যবহার করুন eval

এই উত্তর অনুসারে ইউনিক্স কমান্ডটি ফাঁকা স্থান থেকে রক্ষা পাওয়ার জন্য আপনি ফাঁকা জায়গাটি ছিনিয়ে নিতে পারেন এবং এর পরে ব্যবহার করুন eval:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped

10
cd ~/My\ Code

আমার জন্য কাজ করছে বলে মনে হচ্ছে ... যদি কোটগুলি বাদ দিচ্ছেন তবে স্ল্যাশ রেখে কাজ করা যায় না, আপনি কি কিছু নমুনা কোড পোস্ট করতে পারেন?


10

আপনি যে কোনও ব্যবহার করতে পারেন:

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

আপনি ব্যবহার করতে পারবেন না:

cd ~"/My Code"

প্রথমটি কাজ করে কারণ শেলটি ~ / $ OME HOM / / এ প্রসারিত হয় এবং তারপরে আমার কোডটিতে ডাবল উদ্ধৃতি ছাড়াই পরীক্ষা করে। দ্বিতীয়টি ব্যর্থ হয়েছে কারণ সেখানে মানচিত্রের "জন্য ' ' (ডাবল উদ্ধৃতি) নামে কোনও ব্যবহারকারী নেই ~"


4

একক ব্যাকস্ল্যাশ আমার পক্ষে কাজ করে:

ry4an@ry4an-mini:~$ mkdir "My Code"

ry4an@ry4an-mini:~$ vi todir.sh

ry4an@ry4an-mini:~$ . todir.sh 

ry4an@ry4an-mini:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

আপনি কি নিশ্চিত যে সমস্যাটি হ'ল না যে আপনার শেল স্ক্রিপ্টটি তার সাবশেলে ডিরেক্টরি বদলেছে, তবে তারপরে আপনি মূল শেলের (এবং মূল দির) ফিরে এসেছেন? আমি তা ব্যবহার করে এড়িয়ে গেছি। বর্তমান শেলটিতে স্ক্রিপ্টটি চালাতে, যদিও বেশিরভাগ লোকেরা এর জন্য কেবল একটি উপনাম ব্যবহার করবে। স্পেসগুলি একটি লাল রঙের হেরিং হতে পারে।


ধন্যবাদ, Ry4an (এবং বাকি উত্তরদাতারা)। দেখে মনে হচ্ছে যে আমি স্ক্রিপ্টটি ভুলভাবে সম্পাদন করছি। আমি কেবল এটির মতো চালানোর চেষ্টা করছিলাম:%। / Csomedir আমি বুঝতে পারি না যে "ব্যবহার করতে হবে" আপনার মতো স্ক্রিপ্টটি চালাতে:%। cdsomedir.sh একবার আমি এটি করেছিলাম, এটি কাজ করে। নবাগত ভুল। ধন্যবাদ!


2

লিনাক্সের আওতায় কাজ করার সময় নীচের বাক্য গঠনটি সঠিক:

cd ~/My\ Code

তবে আপনি যখন নিজের ফাইলটি নির্বাহ করছেন তখন নীচের বাক্য গঠনটি ব্যবহার করুন:

$ . cdcode

(কেবল '।' এবং './' নয়)


বুনো কৌতুহলের বাইরে, কেন ব্যাপারটি? আমি কেবল কখনও './' ব্যবহার করে দেখেছি।
তিমি

./ একটি নতুন শেল তৈরি করবে এবং তারপরে ডিরেক্টরিটি পরিবর্তন করবে। সুতরাং যখন স্ক্রিপ্টটি প্রস্থান হবে, তখন এটি শেলের কাছে ফিরে যাবে যা নতুন শেলটি তৈরি করেছিল ... আপনি the / আমার কোডের পরিবর্তে যে ডিরেক্টরিতে স্ক্রিপ্টটি সম্পাদন করেছেন সেখানে আপনি থাকবেন। ' অন্যদিকে শেলের বর্তমান ঘটনায় স্ক্রিপ্টটি কার্যকর করা হয়।
অল্টার লাইফ

বিন্দু "।" এটি একটি ইউনিক্স কমান্ড, "উত্স" কমান্ডের একটি উপাধি। এটি একটি ফাইলের নাম অনুসারে অনুসরণ করা উচিত। সুতরাং "সোর্স মাইফাইল" ফাইলটি আপনার বর্তমান শেলের মধ্যেই চলবে। এবং "। মাইফিল" একই কাজ করবে। "./" ভেরিয়েবলটির অর্থ "বর্তমান ডিরেক্টরি" এবং এটি কোনও আদেশ নয়।
জেপিজি কননলি

2

ডাবল উদ্ধৃতি ব্যবহার করুন

go () 
{ 
    cd "$*"
}

ধন্যবাদ .bashrcডিরেক্টরি পরিবর্তন করার জন্য একটি ফাইলের ফাংশনগুলিতে একটি দরকারী সংযোজন যখন কমান্ড লাইনে স্পেস যুক্ত ডিরেক্টরি নাম ফাঁকা করে ফাঁকা স্থান ছাড়াই বা পুরো জিনিসটি উদ্ধৃত না করে। cdsযদিও এটি একটি ভাল নাম।
mattst

এটি বাড়ানোর কোনও উপায় নেই (যদি কোনওভাবে নেই) যেমন কেবলমাত্র হোম ডিরেক্টরিতে সিডির goসমতুল্য হবে cd?
zennehoy

2

এটি করার খুব সহজ উপায় হ'ল-

 $ cd My\ Folder

ব্যাশে, ডিআইআর কমান্ডটি চালান এবং ফলাফলগুলিতে আপনি দেখতে পাবেন যে ফোল্ডার বা পথের নামগুলির মধ্যে স্থান রয়েছে তাদের ফলাফলগুলিতে এইভাবে লেখা হয়েছে -

$dir
My\ Folder
New\ Folder

2

এটি এটি করবে:

cd ~/My\ Code

আইক্লাউড ড্রাইভে থাকা ফাইলগুলির সাথে কাজ করতে আমার এটি ব্যবহার করতে হয়েছিল। আপনি ডাবল উদ্ধৃতি (") ব্যবহার করতে চান না কারণ এটি অবশ্যই পরম পথ হতে হবে other অন্য কথায়, আপনি টিলড (t) এর সাথে ডাবল উদ্ধৃতিগুলি একত্রিত করতে পারবেন না।

উদাহরণস্বরূপ আমাকে সাম্প্রতিক প্রকল্পের জন্য এটি ব্যবহার করতে হয়েছিল:

cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project

আমি আশা করি এটি সাহায্য করবে.


1

আমার এখন একই ধরণের সমস্যা ছিল আমি যখন কিছু ডেটা ফেলে দেওয়ার জন্য ব্যাশ স্ক্রিপ্টটি ব্যবহার করছিলাম। আমি স্ক্রিপ্ট ফোল্ডারে কোনও ফাঁকা জায়গা রেখে একটি প্রতীকী লিঙ্ক তৈরি শেষ করেছি। আমি তখন আমার স্ক্রিপ্টটিকে প্রতীকী লিঙ্কটিতে দেখিয়েছি এবং এটি দুর্দান্ত কাজ করে।

আপনার লিঙ্ক তৈরি করতে। ln -s [টার্গেট ডিরেক্টরি বা ফাইল] ./selSHORTCUT]

মৌ বা ব্যবহার নাও হতে পারে।


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