Từ hỏi Ubuntu :
Kiểm tra liên kết Hỏi Ubuntu ở trên để nhận xét và có thể có câu trả lời mới từ những người dùng khác.
now
kịch bản bash
Nâng vật nặng là thành phần giật gân cho thấy điều này:
$ now
Weather report: Edmonton March 2018 ┌────────────────────────────┐
Su Mo Tu We Th Fr Sa │ ┏━┓╺┓ ┏━┓┏━┓ ┏━┓┏┳┓ │
\ / Sunny 1 2 3 │ ┃┃┃ ┃ ╹┏━┛┗━┫ ┣━┛┃┃┃ │
.-. -23--14 °C 4 5 6 7 8 9 10 │ ┗━┛╺┻╸╹┗━╸┗━┛ ╹ ╹ ╹ │
― ( ) ― ↘ 22 km/h 11 12 13 14 15 16 17 └────────────────────────────┘
`-’ 14 km 18 19 20 21 22 23 24
/ \ 0.9 mm 25 26 27 28 29 30 31
Vâng, nó thực sự là -14 ở Edmonton và cảm thấy như -23. Một thời gian tốt để dành cuối tuần dài bên trong chơi Tomb Raider 2013 mới đến! Có thể tiếp tục với Resume đó để chuyển đến Vancouver hoặc Montreal ...
Đây là mã:
#!/bin/bash
# NAME: now
# PATH: $HOME/bin
# DESC: Display current weather, calendar and time
# CALL: Called from terminal or ~/.bashrc
# DATE: Apr 6, 2017. Modified: Mar 30, 2018.
# NOTE: To display all available toilet fonts use this one-liner:
# for i in ${TOILET_FONT_PATH:=/usr/share/figlet}/*.{t,f}lf; do j=${i##*/}; toilet -d "${i%/*}" -f "$j" "${j%.*}"; done
# Setup for 92 character wide terminal
DateColumn=34 # Default is 27 for 80 character line, 34 for 92 character line
TimeColumn=61 # Default is 49 for " " " " 61 " " " "
#--------- WEATHER ----------------------------------------------------------
# Current weather, already in color so no need to override
echo " "
# Replace Edmonton with your city name, GPS, etc. See: curl wttr.in/:help
curl wttr.in/Edmonton?0 --silent --max-time 3
# Timeout #. Increase for slow connection---^
echo " "
echo " " # Pad with blank lines for calendar & time to fit
#--------- DATE -------------------------------------------------------------
# calendar current month with today highlighted.
# colors 00=bright white, 31=red, 32=green, 33=yellow, 34=blue, 35=purple,
# 36=cyan, 37=white
tput sc # Save cursor position.
# Move up 9 lines
while [ $((++i)) -lt 10 ]; do tput cuu1; done
# Depending on length of your city name and country name you will:
# 1. Comment out next three lines of code. Uncomment fourth code line.
# 2. Change subtraction value and set number of print spaces to match
# subtraction value. Then place comment on fourth code line.
Column=$(($DateColumn - 10))
tput cuf $Column # Move x column number
printf " " # Blank out ", country" with x spaces
#tput cuf $DateColumn # Position to column 27 for date display
# -h needed to turn off formating: /ubuntu/1013954/bash-substring-stringoffsetlength-error/1013960#1013960
cal -h > /tmp/terminal
CalLineCnt=1
Today=$(date +"%d")
# Prefix with space when length < 2
if [[ ${#Today} < 2 ]] ; then
Today=" "$Today
fi
printf "\033[32m" # color green -- see list above.
while IFS= read -r Cal; do
printf "$Cal"
if [[ $CalLineCnt > 2 ]] ; then
# See if today is on current line & invert background
tput cub 22
for (( j=0 ; j <= 18 ; j += 3 )) ; do
Test=${Cal:$j:2} # Current day on calendar line
if [[ "$Test" == "$Today" ]] ; then
printf "\033[7m" # Reverse: [ 7 m
printf "$Today"
printf "\033[0m" # Normal: [ 0 m
printf "\033[32m" # color green -- see list above.
tput cuf 1
else
tput cuf 3
fi
done
fi
tput cud1 # Down one line
tput cuf $DateColumn # Move 27 columns right
CalLineCnt=$((++CalLineCnt))
done < /tmp/terminal
printf "\033[00m" # color -- bright white (default)
echo ""
tput rc # Restore saved cursor position.
#-------- TIME --------------------------------------------------------------
tput sc # Save cursor position.
# Move up 9 lines
i=0
while [ $((++i)) -lt 10 ]; do tput cuu1; done
tput cuf $TimeColumn # Move 49 columns right
# Do we have the toilet package?
if hash toilet 2>/dev/null; then
echo " "$(date +"%I:%M %P")" " | \
toilet -f future --filter border > /tmp/terminal
# Do we have the figlet package?
elif hash figlet 2>/dev/null; then
echo $(date +"%I:%M %P") | figlet > /tmp/terminal
# else use standard font
else
echo $(date +"%I:%M %P") > /tmp/terminal
fi
while IFS= read -r Time; do
printf "\033[01;36m" # color cyan
printf "$Time"
tput cud1 # Up one line
tput cuf $TimeColumn # Move 49 columns right
done < /tmp/terminal
tput rc # Restore saved cursor position.
exit 0
Điều kiện tiên quyết
Để hiển thị thời gian ưa thích, bạn cần cài đặt toilet
:
sudo apt install toilet
Đối với một màn hình hiển thị thời gian ưa thích khác (nhưng không hoàn toàn như ưa thích) cài đặt figlet
:
sudo apt install figlet
Nếu không, thời gian sẽ được hiển thị trong phông chữ "bình thường".
Thời tiết
Thời tiết được cung cấp bởi curl wttr.in/cityname?0
lệnh. Trong thiết bị đầu cuối của bạn sử dụng: curl wttr.in/:help
để biết thêm chi tiết.
Thời tiết: Thay đổi tên thành phố
Bạn sẽ muốn sửa đổi phần mã này và thay đổi Edmonton
thành tên thành phố của bạn:
# Replace Edmonton with your city name, GPS, etc. See: curl wttr.in/:help
curl wttr.in/Edmonton?0 --silent --max-time 3
# Timeout #. Increase for slow connection---^
Unicode được hỗ trợ cho các tên thành phố như /Москва
(Moscow). Thư sân bay được hỗ trợ như YEG
đối với Edmonton.
Thời tiết: Xóa tên quốc gia
Khi thiết bị đầu cuối được đặt rộng 92 ký tự, thời tiết sẽ hiển thị là "Edmonton, Canada." quá dài so với sở thích của tôi:
Tệ hơn nữa khi thiết bị đầu cuối được đặt cho độ rộng 80 ký tự mặc định:
Để khắc phục sự cố, ", Tên quốc gia" được làm trống trên màn hình với mã này:
# Depending on length of your city name and country name you will:
# 1. Comment out next three lines of code. Uncomment fourth code line.
# 2. Change subtraction value and set number of print spaces to match
# subtraction value. Then place comment on fourth code line.
Column=$(($DateColumn - 10))
tput cuf $Column # Move x column number
printf " " # Blank out ", country" with x spaces
#tput cuf $DateColumn # Position to column 27 for date display
Nếu bạn cần trợ giúp với phần này của kịch bản, vui lòng gửi bình luận bên dưới để được hỗ trợ.
Điều chỉnh độ rộng màn hình đầu cuối
Điều chỉnh khoảng cách đến chiều rộng màn hình thiết bị đầu cuối của bạn bằng cách thay đổi:
# Setup for 92 character wide terminal
DateColumn=34 # Default is 27 for 80 character line, 34 for 92 character line
TimeColumn=61 # Default is 49 for " " " " 61 " " " "
Buộc tất cả lại với nhau trong ~/.bashrc
Chỉnh sửa ~/.bashrc
tệp của bạn và thêm các dòng này vào dưới cùng:
# Splash Calendar and time
now
# ASCII Linux distribution display
screenfetch
Lưu thay đổi tệp `~ / .bashrc".
Để hiển thị thông tin Ubuntu bạn cần screenfetch
:
sudo apt install screenfetch
Có các gói hiển thị tương tự để screenfetch
mua sắm xung quanh!
Nếu bạn muốn cùng một dấu nhắc lệnh với dòng chia "─────────" giữa các lệnh, hãy thay đổi các dòng sau:
if [ "$color_prompt" = yes ]; then
PS1='───────────────────────────────────────────────────────────────────────────────────────────
${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='───────────────────────────────────────────────────────────────────────────────────────────
${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
Lưu ý chiều dài của đường phân cách trùng với chiều rộng của screenfetch
đầu ra. Trong trường hợp này, nó rộng 92 ký tự và gnome-terminal
tùy chọn được đặt tương ứng.
man ip
. Sử dụng công-br
tắc. Bạn cũng có thể muốn sử dụng công-4
tắc. Lệnh của bạn có thể được rút ngắn thànhip -br a | sed -nE 's:^(\w+)\s+UP\s+([0-9.]+)/.*$:\1 \2:p'
. Thậm chí tốt hơn, sử dụnghostname -I
.