ব্যাশে কোনও ফাইলের পুরো পথ কীভাবে পাবেন?


23

আমি কোনও ফাইলের পুরো পথ পাবার সহজ উপায় চাই। আমি বর্তমানে এটি টাইপ:

echo `pwd`/file.ext

এটি সংক্ষিপ্ত করার চেষ্টা করে আমি একটি বাশ ওরফে তৈরি করেছি:

alias fp='echo `pwd`/'

তবে এখন যদি আমি টাইপ fp file.extকরি তবে একটি স্থান আছে যা /এবং এর মধ্যে প্রদর্শিত হবে file.ext

এই জাতীয় আদেশটি ইতিমধ্যে বিদ্যমান আছে এবং আমি এটি মিস করছি? যদি তা না হয় তবে আমি কীভাবে বাশাতে এইরকম একটি নাম বা ফাংশন তৈরি করব?

উত্তর:


31

লিনাক্স সিস্টেমে readlinkআপনার জিএনইউ কোর্টিলস প্রকল্পটি ইনস্টল করা উচিত এবং এটি করতে পারেন:

readlink -f file.ext

ডেবিয়ান / উবুন্টু সিস্টেমে রিয়েলপথ ইউটিলিটি ইনস্টল থাকতে পারে যা "মূলত কোর্টিল/bin/readlink -f প্যাকেজের মতো কার্যকারিতা সরবরাহ করে ।"


readlink -f(বা realpath, যা সামঞ্জস্যের জন্য রাখা একটি পুরানো ইউটিলিটি) অতিরিক্তভাবে সমস্ত প্রতীকী লিঙ্কগুলি প্রসারিত করবে, যা প্রয়োজনীয়ভাবে কাম্য নয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

8
fyi: ম্যাকোক্সে কাজ করে না।
আকির

আমার ম্যাকের জন্য, আমি হোমব্রু ব্যবহার করে কোর্টিলগুলি ইনস্টল করেছি এবং এতে অন্তর্ভুক্ত রয়েছে realpath
ডগ হ্যারিস

7

এটার পরিবর্তে pwdকমান্ডেরPWD ভেরিয়েবলটি ব্যবহার করুন (এটি পসিক্সেও রয়েছে):

fp () {
  case "$1" in
    /*) printf '%s\n' "$1";;
    *) printf '%s\n' "$PWD/$1";;
  esac
}

আপনার যদি উইন্ডোজ সমর্থন করার প্রয়োজন হয় তবে নিখুঁত পাথগুলি সনাক্ত করা আরও জটিল হবে কারণ ইউনিক্স সরঞ্জামগুলির প্রতিটি বন্দরের ফাইল পাথ অনুবাদ করার নিজস্ব নিয়ম রয়েছে। সাইগউইনের সাথে cygpathইউটিলিটিটি ব্যবহার করুন ।


হতে পারে এটি আপনার পছন্দ তবে এই ফাংশনটি নতুন লাইনটিকে আউটপুট দেয় না।
সিউরাস

এই পদ্ধতির কেবল শেল-বিল্টিনগুলি ব্যবহার করার সুবিধা রয়েছে যা বাইরের বাইনারিগুলির তুলনায় দ্রুত। আপনার এই সত্যটি কিছুটা আরও স্পষ্ট করা উচিত।
আকির

4

আপনি এখনই যা ব্যবহার করেন তা দিয়ে আপনার প্রশ্নের উত্তর দিতে:

আপনি যে মুহুর্তে টাইপ করছেন সেখানে উপন্যাসটি প্রসারিত হয়। আপনি টাইপ করেছেন:

% fp<SPACE>file.ext

এটি হয়ে যায়

% echo `pwd`<SPACE>file.exe

এটি এড়াতে আপনি কোনও ফাংশন ব্যবহার করতে পারেন:

function fp() {
    echo `pwd`/"$1"
}

আপনি এটি যথারীতি ব্যবহার করতে পারেন:

% fp file.ext

আপনার পরিবর্তনশীল এবং কমান্ড বিকল্পের চারপাশে ডাবল উদ্ধৃতি প্রয়োজন:echo "`pwd`/$1"
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস: কোন পরিস্থিতিতে?
আকির

2
@ ককিরা: আপনি যদি না চান প্রসারণের ফলাফলটিকে গ্লোব্বিং প্যাটার্ন হিসাবে বিবেচনা করা হয় এবং গ্লোববিংয়ের ফলাফলগুলি কথায় বিভক্ত হয় তবে সর্বদা ডাবল উদ্ধৃতি ব্যবহার করুন। এখানে আপনি একটি একক ফাইলের নাম তৈরি করছেন, যাতে দ্বৈত উক্তিগুলি প্রয়োজন হয় ( *অন্য ফাইল ধারণকারী ডিরেক্টরিতে ডাকা একটি ফাইল দিয়ে আপনার ফাংশনটি চেষ্টা করুন )।
গিলস

' ' শেলটি দিয়ে গ্লোবড হয় (আমার ক্ষেত্রে zsh) এবং ফাংশনটি আঘাত করার আগে তাদের প্রসারিত করা হয়। ফাংশনটির জন্য প্রথম প্যারামিটটি থেকে fp *ফলন /tmp/4cc3ea0c1b34bহয়। অন্যান্য পরামিতি ডিরেক্টরিতে অন্য ফাইল হবে। আমার ' ' নামে একটি ফাইল হওয়ার সাথে সাথে ফাংশনটি এখনও প্রত্যাশা অনুযায়ী কাজ করে, এটিকে "*" বা * বা * দিয়ে কল করে
আকিরা

ব্যাশ এখানে "খারাপ" হিসাবে মনে হচ্ছে, ব্যাশ আপনি যা উল্লেখ করছেন তা ফল দেয়।
আকির

3

তুমি ব্যবহার করতে পার:

realpath file.ext

আমার একটা নেই কোথা থেকে আসে?
উদ্ভট

@ ফ্রেবজৌস: এটি ডেবিয়ান এবং ডেরিভেটিভগুলির জন্য সুনির্দিষ্ট এবং আপনি কেবল এটির বা নির্ভর করে এমন কোনও প্যাকেজ অনুরোধ করলেই কেবল ইনস্টল করা হবে installed
গিলস 'অশুভ হওয়া বন্ধ করুন'

আমি আর্চ ব্যবহার করছি। এটি ডেবিয়ান ভিত্তিক নয়, তবে এটির জন্য এটির জন্য একটি প্যাকেজ রয়েছে way আমার যদি ইতিমধ্যে রিডলিংক থাকে তবে এটি ইনস্টল করার উপযুক্ত নয়।
উদ্ভট

ঠিক আছে, এটি একটি বিকল্প; অথবা আপনি কোনও ফাংশন বিবেচনা করতে পারেন, গিলসের উত্তর দেখুন। যাইহোক যে আপনি এর সাথে করতে চান তার আসল ব্যবহারের উপর নির্ভর করে (আমি কৌতূহলী)।
সিউরাস

@frabjous: আপনি উল্লেখ না কি সিস্টেম আপনি আছেন, কিন্তু যদি এটি একটি অ্যাপটিচিউড ভিত্তিক প্যাকেজ ম্যানেজার (ডেবিয়ান, উবুন্টু, মিন্ট, ইত্যাদি) ব্যবহার করে, আপনি টাইপ করতে পারেন apt-cache search realpathবিকসিত যে coreutils এবং প্লেইন ওল ' realpath প্যাকেজ উভয় এটি ধারণ করে। তারপরে আপনি এটি ইনস্টল করতে sudo apt-get install realpath(বা coreutils) টাইপ করতে পারেন।
মাইকেল শ্যাপার 8

1

Https://stackoverflow.com/a/3915420/5795941 থেকে

এটি আমার কাছে গ্রহণযোগ্য একমাত্র উপায়। রিয়েলপথ এবং পঠন লিঙ্কের মতো লিঙ্কগুলি প্রসারিত করে না এবং এটি করার ধ্রুপদী উপায় যা আমি সর্বত্র দেখেছি।

#! /bin/sh
echo "$(cd "$(dirname "$1")"; pwd -P)/$(basename "$1")"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.