আমি এসও সম্পর্কিত একই নিবন্ধ থেকে কয়েকটি উদাহরণ ব্যবহার করতে সক্ষম হয়েছি: শিরোনাম: বাশায় কার্সার অবস্থানটি কীভাবে পাবেন? । আমি এগুলি এখানে পোস্ট করছি কেবল তারা দেখায় যে তারা কাজ করে এবং সমাধানের বিষয়বস্তু আসলে ইউ ও এল-তেও থাকে।
বাশ সমাধান
একটি স্ক্রিপ্ট ভিতরে থেকে
#!/bin/bash
# based on a script from http://invisible-island.net/xterm/xterm.faq.html
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
# on my system, the following line can be replaced by the line below it
echo -en "\033[6n" > /dev/tty
# tput u7 > /dev/tty # when TERM=xterm (and relatives)
IFS=';' read -r -d R -a pos
stty $oldstty
# change from one-based to zero based so they work with: tput cup $row $col
row=$((${pos[0]:2} - 1)) # strip off the esc-[
col=$((${pos[1]} - 1))
echo "(row,col): $row,$col"
দ্রষ্টব্য: আমি আউটপুটটি সামান্য পরিবর্তন করেছি!
উদাহরণ
$ ./rowcol.bash
(row,col): 43,0
$ clear
$ ./rowcol.bash
(row,col): 1,0
ইন্টারেক্টিভ শেল
এই কমান্ড চেইন কার্সারের সারি এবং কলাম অবস্থানগুলি পাওয়ার জন্য কাজ করেছে:
$ echo -en "\E[6n";read -sdR CURPOS; CURPOS=${CURPOS#*[};echo "${CURPOS}"
উদাহরণ
$ echo -en "\E[6n";read -sdR CURPOS; CURPOS=${CURPOS#*[};echo "${CURPOS}"
13;1
$ clear
$ echo -en "\E[6n";read -sdR CURPOS; CURPOS=${CURPOS#*[};echo "${CURPOS}"
2;1
দ্রষ্টব্য: এই পদ্ধতিটি কোনও ধরণের স্ক্রিপ্ট থেকে ব্যবহারযোগ্য বলে মনে হচ্ছে না। একটি ইন্টারেক্টিভ টার্মিনালের সাধারণ কমান্ডগুলিও আমার পক্ষে কার্যকর হয়নি। উদাহরণ স্বরূপ:
$ pos=$(echo -en "\E[6n";read -sdR CURPOS; CURPOS=${CURPOS#*[};echo "${CURPOS}")
কেবল অনির্দিষ্টকাল ধরেই ঝুলছে।
ড্যাশ / শ সমাধান
একটি স্ক্রিপ্ট ভিতরে থেকে
এই সমাধানটি উবুন্টু / ডেবিয়ান সিস্টেমগুলির জন্য যা স্টক আসে dash
, যা পসিক্স অনুগত। এই কারণে, read
কমান্ডটি -d
অন্যান্য পার্থক্যের মধ্যে স্যুইচটিকে সমর্থন করে না ।
এটির কাছাকাছি sleep 1
আসার জন্য এই সমাধানটি রয়েছে যা -d
স্যুইচের জায়গায় একটি ব্যবহার করে । এটি আদর্শ নয় তবে কমপক্ষে একটি কার্যক্ষম সমাধান সরবরাহ করে।
#!/bin/sh
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
tput u7 > /dev/tty
sleep 1
IFS=';' read -r row col
stty $oldstty
row=$(expr $(expr substr $row 3 99) - 1) # Strip leading escape off
col=$(expr ${col%R} - 1) # Strip trailing 'R' off
echo "(row,col): $col,$row"
উদাহরণ
$ ./rowcol.sh
(row,col): 0,24
$ clear
$ ./rowcol.sh
(row,col): 0,1
ইন্টারেক্টিভ শেল
আমি একটি কার্যক্ষম সমাধান খুঁজে পাইনি যা কেবলমাত্র sh
একটি ইন্টারেক্টিভ শেলের জন্য কাজ করেছিল ।