Ini mungkin terdengar aneh, tapi saya tahu cara mengatur posisi kursor vertikal di Bash seperti ini:
echo -e "\e[12H"
Ini memindahkan kursor ke garis ke-12 (dimulai dengan 1).
Jadi bagaimana cara mendapatkan posisi kursor (nomor baris) menggunakan linux bash? Akan sangat membantu jika saya bisa menyimpan nilai ini dalam suatu variabel sehingga saya dapat menghitungnya.
EDIT:
Ini adalah kesalahan yang saya dapatkan:
$ sh rowcol.sh
-en
read: 9: Illegal option -d
test.sh: 12: Bad substitution
Jawaban:
Saya dapat menggunakan beberapa contoh dari artikel yang sama di SO, berjudul: Bagaimana cara mendapatkan posisi kursor di bash? . Saya memposting ini di sini hanya untuk menunjukkan bahwa mereka berfungsi dan bahwa isi solusi sebenarnya ada di U&L juga.
Solusi bash
Dari dalam naskah
CATATAN: Saya sedikit mengubah output!
Contoh
Shell interaktif
Rantai perintah ini berfungsi untuk mendapatkan posisi baris dan kolom dari kursor:
Contoh
CATATAN: Metode ini tampaknya tidak dapat digunakan dari semua jenis skrip. Bahkan perintah sederhana di terminal interaktif tidak bekerja untuk saya. Sebagai contoh:
hanya hang tanpa batas.
solusi dash / sh
Dari dalam naskah
Solusi ini untuk sistem Ubuntu / Debian yang disertakan
dash
, yang sesuai dengan POSIX. Karena itu,read
perintah tidak mendukung-d
peralihan di antara perbedaan lainnya.Untuk menyiasati ini ada solusi ini yang menggunakan
sleep 1
di tempat-d
saklar. Ini tidak ideal tetapi menawarkan setidaknya solusi yang berfungsi.Contoh
Shell interaktif
Saya tidak dapat menemukan solusi yang bisa diterapkan yang berfungsi hanya
sh
dalam shell interaktif.sumber
sh rowcol.sh
. Tidak masalah apa yang Anda masukkan di baris pertama (#!/bin/bash
atau#!/bin/sh
) atau apa yang mengakhiri file!sh
hanya mode kompatibilitasbash
. Ketika saya melakukan itu (sh rowcol.bash
) itu berhasil, apakah itu tidak berhasil untuk Anda?alias sh=bash
?Menggunakan
-p
opsi bukannyaecho
saya menemukan memecahkan masalah yang menggantung dalam skrip. Diuji denganGNU bash, version 3.00.16(1)-release (x86_64-redhat-linux-gnu)
.bekerja secara interaktif atau dalam sebuah skrip:
Output:
sumber
Anda bisa mendapatkan posisi kursor melalui
ANSI CSI DSR
(Perangkat Status Report):\e[6n
. Catatan itu mengembalikannya dalam format yang mirip denganANSI CSR CUP
(Posisi Kursor) yang Anda sebutkan dalam pertanyaan Anda, namun itu mengikuti bentuk\e[n;mR
(di mana n adalah baris dan m kolom).Lebih detail kode pelarian ANSI di wikipedia .
Untuk mendapatkan nilai ke dalam variabel, ini dijawab pada StackOverflow .
Seperti disebutkan dalam jawaban / komentar sebelumnya (dan dirinci dalam artikel wikipedia), kode-kode ini tidak selalu portabel (dari terminal ke terminal dan OS ke OS). Saya masih berpikir ini lebih baik ditangani dengan termcap / kutukan;)
sumber
echo -e
,echo -en
danread ...
. Ini hanya terjadi ketika kode hadir dalam file! Saya tidak begitu mengerti ini!echo -e
bekerja sebelumnya tetapi sekarang tidak! Apa yang mungkin menyebabkan ini dan bagaimana cara mengembalikannya?Dengan
sh
sintaks POSIX :sumber