আমি যা পাই:
host:~ user$ cat example.txt
some texthost:~ stas$
আমি যা পেতে চাই:
host:~ user$ cat example.txt
some text
host:~ stas$
আমি এমন cat
আচরণ করার কোনও উপায় আছে কি ?
আমি ম্যাক ওএস এক্সে ব্যাশ ব্যবহার করছি।
আমি যা পাই:
host:~ user$ cat example.txt
some texthost:~ stas$
আমি যা পেতে চাই:
host:~ user$ cat example.txt
some text
host:~ stas$
আমি এমন cat
আচরণ করার কোনও উপায় আছে কি ?
আমি ম্যাক ওএস এক্সে ব্যাশ ব্যবহার করছি।
উত্তর:
বেশিরভাগ ইউনিক্স সরঞ্জামগুলি পাঠ্য ফাইলগুলির সাথে ভালভাবে কাজ করার জন্য ডিজাইন করা হয়েছে। একটি পাঠ্য ফাইলের মধ্যে লাইনগুলির ক্রম থাকে। একটি রেখায় মুদ্রণযোগ্য অক্ষরের একটি অনুক্রম থাকে যা একটি নতুন লাইনের চরিত্রের সাথে শেষ হয়। বিশেষত, খালি খালি পাঠ্য ফাইলটির শেষ অক্ষর সর্বদা একটি নতুন লাইন চরিত্র। স্পষ্টতই, example.txt
এতে some text
কোনও চূড়ান্ত নতুন লাইন থাকে না, সুতরাং এটি কোনও পাঠ্য ফাইল নয়।
cat
একটি সাধারণ কাজ করে; যথেচ্ছ ফাইলগুলি পাঠ্য ফাইলগুলিতে রূপান্তর করা সেই কাজের অংশ নয়। কিছু অন্যান্য সরঞ্জাম সর্বদা তাদের ইনপুটটিকে পাঠ্য ফাইলগুলিতে পরিণত করে; আপনি যদি নিশ্চিত না হন যে ফাইলটি আপনি প্রদর্শিত করছেন একটি নতুন লাইনের সাথে শেষ হচ্ছে, awk 1
তার পরিবর্তে চলার চেষ্টা করুন cat
।
পূর্ববর্তী কমান্ডটি কার্সারকে শেষ প্রান্তের বাইরে অন্য কোথাও রেখে দিলে আপনি পরবর্তী লাইনে বাশকে তার প্রম্পট প্রদর্শন করতে পারেন। এটি আপনার মধ্যে রাখুন .bashrc
( ডেনিস উইলিয়ামসনের একটি প্রস্তাবের গেটফ্রি অনুসারে )
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
PROMPT_COMMAND
এবং যদি এটি 0 না \n
হয় তবে এর প্রথম চরিত্র হিসাবে একটি নতুন লাইন ( ) ব্যবহার করুন PS1
।
আমি নিম্নলিখিত পদ্ধতিটি পছন্দ করি ...
cat example.txt ; echo
এটি লিখিত সামগ্রীগুলির মূল্যায়ন করে না example.txt
বা মাঝে মাঝে একটি নতুন লাইন যুক্ত করে না। এটি একবার বিড়ালটি সম্পন্ন হওয়ার পরে, একটি নতুন লাইনের প্রতিধ্বনিত হয় সহজেই মনে রাখা যায় এবং তারা শক্তিশালী বা দুর্বল উদ্ধৃতি সঠিকভাবে ব্যবহার করছে কিনা তা নিয়ে কেউ ভাবছেন না।
প্রকৃতপক্ষে একমাত্র নেতিবাচকতা হ'ল যদি ফাইলটির নিজস্ব ট্রেইলিং নিউলাইন থাকে তবে আপনি একটি অতিরিক্ত নতুন লাইন পাবেন।
আমি @ গিলসের উত্তরটি ব্যবহার করতে শুরু করেছিলাম, তবে দেখেছি যে টার্মিনালটি কলামগুলির সংখ্যা পরিবর্তন করলে প্রম্পটটি প্রত্যাশার মতো কোনও লাইনের শুরুতে আর থাকবে না। এটি বিভিন্ন কারণে ঘটতে পারে, যার মধ্যে tmux / স্ক্রিন বিভাজন, একটি GUI ধারকটির ম্যানুয়াল পুনরায় আকার দেওয়া, ফন্ট পরিবর্তন ইত্যাদি etc.
আমি সত্যিই যা চেয়েছিলাম এমন কিছু ছিল যা টার্মিনালটি প্রথম কলাম ব্যতীত অন্য কিছুতে প্রম্পটটি মুদ্রণ শুরু করবে if এটি করার জন্য আমার বর্তমান কলামটি কীভাবে পাবেন তা অনুধাবন করা দরকার, যা আমি এই উত্তরটি ব্যবহার করার জন্য ব্যবহার করেছি । চূড়ান্ত কার্যকারী প্রম্পট কনফিগারেশন নীচে:
###
# Configure PS1 by using the old value but ensuring it starts on a new line.
###
__configure_prompt() {
PS1=""
if [ "$(__get_terminal_column)" != 0 ]; then
PS1="\n"
fi
PS1+="$PS1_WITHOUT_PREPENDED_NEWLINE"
}
###
# Get the current terminal column value.
#
# From /programming//a/2575525/549363.
###
__get_terminal_column() {
exec < /dev/tty
local oldstty=$(stty -g)
stty raw -echo min 0
echo -en "\033[6n" > /dev/tty
local pos
IFS=';' read -r -d R -a pos
stty $oldstty
echo "$((${pos[1]} - 1))"
}
# Save the current PS1 for later.
PS1_WITHOUT_PREPENDED_NEWLINE="$PS1"
# Use our prompt configuration function, preserving whatever existing
# PROMPT_COMMAND might be configured.
PROMPT_COMMAND="__configure_prompt;$PROMPT_COMMAND"
__get_terminal_column
?
PS1="\n"
আমার ঠিক আছে echo
এবং সংশোধন করার প্রয়োজন নেই PS1
।
এটির সাথে সমস্যাটি হতে পারে যে আপনার উদাহরণ.txt এর সাথে আপনার ফাইলের শেষে কোনও নতুন লাইন নেই।
cat
কাজ নয় তাই সম্ভবত আমি কিছুটা সমাধানের জন্য খুঁজছি।
example.txt
ফাইলের শেষে একটি নতুন লাইন না থাকা এমন একটি উত্তর নয় এটি পুরো প্রশ্নের মূল বিষয়।
আপনি যদি জেদ করার cat
জন্য জিদ করেন , এটি শেষ প্রান্তে একটি নিউলাইন সহ এবং ছাড়া উভয় প্রকারের ফাইলের জন্য কাজ করে:
echo "`cat example.txt`"
আপনি এটিকে আপনার পছন্দের নামের সাথে (এমনকি cat
) একটি ফাংশনে পরিণত করতে পারেন .bashrc
:
cat1(){ echo "`/bin/cat $@`";}
আপনি .bashrc এ যুক্ত করতে পারেন
PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"
আমার জন্য কাজ কর.
cat
, সুতরাং যখন এই সমস্যাটি আমাকে আবার বিরক্ত করতে শুরু করবে তখন আমি এটিকে সর্বশেষ সমাধান হিসাবে রাখব।