Created
August 21, 2016 08:43
-
-
Save skirl/3dd0725a65d0d02d65885ae80263237d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
lsblk_init(){ | |
# Смотрим подключенные устройства: | |
dev=( $(ls /dev/sd* -1 | cut -c6-) ) | |
# Выбираем последнее устройство по умолчанию: | |
n=$((${#dev[@]}-1)) | |
}; lsblk_init | |
# lsblk - показать подключенные жесткие диски и флешки: | |
lsblkk_k(){ sudo lsblk -o \ | |
TRAN,MODEL,REV,VENDOR,PARTFLAGS,SIZE,NAME,FSTYPE,MOUNTPOINT,RM,LABEL #,UUID | |
}; alias kir_lsblk='lsblkk_k'; alias bk='lsblkk_k' | |
# Форматировать устройство в NTFS: | |
format_ntfs_k(){ | |
read -n1 -srp " Are you sure? [y/n]" | |
echo | |
if [[ "$REPLY" =~ ^(Y|y)$ ]] | |
then | |
# tput | |
# http://linuxcommand.org/lc3_adv_tput.php | |
# http://askubuntu.com/questions/366103 | |
#/saving-more-corsor-positions-with-tput-in-bash-terminal | |
# http://stackoverflow.com/questions/14259311 | |
#/set-or-change-vertical-position-of-the-cursor | |
tput sc | |
tput cnorm -- normal # Set the cursor to its normal state. | |
read -rp " Label: " LABEL | |
if [ ${#dev[$n]} = 3 ] | |
then | |
sudo parted --script --align optimal "/dev/${dev[$n]}" \ | |
mklabel msdos mkpart primary 0% 100% | |
sudo mkntfs --fast -L "$LABEL" "/dev/${dev[$n]}1" | |
else | |
sudo mkntfs --fast -L "$LABEL" "/dev/${dev[$n]}" | |
fi | |
echo -e "\n Format device /dev/${dev[$n]} completed :)" | |
tput civis -- invisible # Set to cursor to be invisible. | |
dev=( $(ls /dev/sd* -1 | cut -c6-) ) | |
lsblkk_k > /tmp/lsblkk_k | |
else | |
echo " Cancel" | |
fi | |
}; alias kir_format_ntfs='format_ntfs_k' | |
# Извлечь и отключить питание: | |
lsblk_eject(){ | |
cd | |
sudo umount $(ls /dev/sd* | grep ${dev[$n]:0:3}.) && \ | |
for i in $(ls /dev/sd* | grep sdb. | cut -c6-9) | |
do sudo rmdir /media/k/$i | |
done | |
udisksctl power-off -b /dev/${dev[$n]} | |
dev=( $(ls /dev/sd* -1 | cut -c6-) ) | |
n=$((${#dev[@]}-1)) | |
lsblkk_k > /tmp/lsblkk_k | |
tput home | |
tput ed | |
cat /tmp/lsblkk_k | grep -e "─${dev[$n]}" -e " ${dev[$n]}" -e " " | |
} | |
# Монтировать и отмонтировать: | |
lsblk_mounter(){ | |
if [ ${#dev[$n]} = 3 ] | |
then # Unmount all partitions: | |
cd | |
sudo umount $(ls /dev/sd* | grep ${dev[$n]:0:3}.) && \ | |
for i in $(ls /dev/sd* | grep sdb. | cut -c6-9) | |
do sudo rmdir /media/k/$i | |
done | |
else | |
dir="$(awk -v needle="/dev/${dev[$n]}" '$1==needle {print $2}' /proc/mounts)" | |
if [ -z "$dir" ] | |
then | |
sudo mkdir /media/k/${dev[$n]} | |
sudo mount /dev/${dev[$n]} /media/k/${dev[$n]} -o uid=1000 | |
lsblkk_k > /tmp/lsblkk_k | |
tput home | |
tput ed | |
cat /tmp/lsblkk_k | grep -e "─${dev[$n]}" -e " ${dev[$n]}" -e " " | |
ls /media/k/${dev[$n]} | |
else | |
cd | |
sudo umount /dev/${dev[$n]} | |
sudo rmdir /media/k/${dev[$n]} | |
fi | |
fi | |
lsblkk_k > /tmp/lsblkk_k | |
} | |
# Показать: | |
lsblk_ls(){ | |
dir="$(awk -v needle="/dev/${dev[$n]}" '$1==needle {print $2}' /proc/mounts)" | |
if [ -z "$dir" ] | |
then | |
lsblk_mounter | |
else ls "$dir" | |
fi | |
} | |
# Октрыть устройство: | |
lsblk_open(){ | |
lsblk_ls | |
dir="$(awk -v needle="/dev/${dev[$n]}" '$1==needle {print $2}' /proc/mounts)" | |
cd $dir && break | |
} | |
# Move: | |
lsblk_up(){ [ $n -gt 0 ] && n=$(($n-1)); } | |
lsblk_down(){ [ $(($n+1)) -lt ${#dev[@]} ] && n=$(($n+1)); } | |
lsblk_home(){ n=0; } | |
lsblk_end(){ n=$((${#dev[@]}-1)); } | |
# Main | |
lsblk_main(){ | |
clear | |
lsblkk_k > /tmp/lsblkk_k | |
tput civis -- invisible # Set to cursor to be invisible. | |
# Это офигенный цикл он умеет понимать, что нажато на клавиатуре: и буквы, и стрелочки и т.п.! | |
# Источник: | |
# http://unix.stackexchange.com/questions/179191 | |
#/bashscript-to-detect-right-arrow-key-being-pressed | |
while :; do | |
tput home # Move the cursor to upper left corner (0,0). | |
cat /tmp/lsblkk_k | grep -e "─${dev[$n]}" -e " ${dev[$n]}" -e " " | |
read -rsN1 | |
tput ed # Clear from the cursor to the end of the screen. | |
#:)#_ HELP | |
case "$REPLY" in | |
# One byte (char) cases. | |
J) lsblk_home;; #_ Home | |
j) lsblk_up;; #_ ^ Up | |
k) lsblk_down;; #_ v Down | |
K) lsblk_end;; #_ End | |
o) lsblk_open;; #_ - open device. | |
l) lsblk_ls;; #_ > Right - show files. | |
m|u) lsblk_mounter;; #_ - mount or umount device. | |
f) format_ntfs_k;; #_ - format device to NTFS. | |
e) lsblk_eject;; #_ - eject. | |
q) break;; #_ Here only quit. | |
$'\x0a') lsblk_open;; #_ Enter - open device. | |
$'\x20') lsblk_mounter;; #_ Space - mount or umount. | |
$'\x1b') # Handle ESC sequence. | |
read -rsN1 | |
if [[ "$REPLY" == "[" ]]; then | |
read -rsN1 | |
case "$REPLY" in | |
A) lsblk_up;; # ^ Up | |
B) lsblk_down;; # v Down | |
C) lsblk_ls;; # > Right | |
D) :;; # < Left | |
H) lsblk_home;; # Home | |
F) lsblk_end;; # End | |
# http://stackoverflow.com/questions/192319 | |
#/how-do-i-know-the-script-file-name-in-a-bash-script | |
# Help: | |
*) cat $BASH_SOURCE | grep "#\ | |
_" | sed "s/\\t/ /g" | sed "s/).*#\ | |
_ /) /g" | |
esac | |
echo | |
fi;; | |
# Help: | |
*) cat $BASH_SOURCE | grep "#\ | |
_" | sed "s/\\t/ /g" | sed "s/).*#\ | |
_ /) /g" | |
esac | |
done | |
tput cnorm -- normal # Set the cursor to its normal state. | |
# Очистить функции и переменные после работы скрипта: | |
# Will unset the function: | |
unset -f lsblk_init lsblk_eject format_ntfs_k lsblk_mounter | |
unset -f lsblk_ls lsblk_open lsblk_up lsblk_down lsblk_home lsblk_end | |
# Will unset variables: | |
unset i dev dir n REPLY LABEL needle | |
rm /tmp/lsblkk_k | |
}; | |
# Запуск скрипта: | |
lsblk_main |
Author
skirl
commented
Aug 21, 2016
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment