Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Bash Shell PS1:10 Ví dụ giúp bạn sử dụng Linux giống Angelina Jolie

Bash Shell PS1:10 Ví dụ giúp bạn sử dụng Linux giống Angelina Jolie Ảnh do f1r3storm85

Trong bài trước, chúng ta đã thảo luận về các biến môi trường Linux PS [1-4] và PROMPT_COMMAND. Nếu được sử dụng hiệu quả, PS1 có thể cung cấp thông tin có giá trị ngay trên dấu nhắc lệnh.

Trong Tomb Raider, Angelina Jolie có tất cả các tiện ích và vũ khí trong tầm tay để giải quyết bí ẩn theo phong cách. Mặc dù tiện ích và phong cách của Angelina Jolie khó có thể phù hợp, nhưng ít nhất chúng ta hãy cố gắng làm cho lời nhắc Linux cũ tốt trở nên hoạt động và phong cách bằng cách sử dụng 10 ví dụ được cung cấp trong bài viết này.

1. Hiển thị tên người dùng, tên máy chủ và thư mục làm việc hiện tại trong lời nhắc

PS1 trong ví dụ này hiển thị ba thông tin sau trong lời nhắc:

  • \ u - Tên người dùng
  • \ h - Tên máy chủ
  • \ w - Đường dẫn đầy đủ của thư mục làm việc hiện tại
-bash-3.2$ export PS1="\u@\h \w> "

ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>

2. Hiển thị thời gian hiện tại trong lời nhắc

Trong biến môi trường PS1, bạn có thể thực thi trực tiếp bất kỳ lệnh Linux nào, bằng cách chỉ định ở định dạng $ (linux_command). Trong ví dụ sau, lệnh $ (date) được thực thi để hiển thị thời gian hiện tại bên trong lời nhắc.

ramesh@dev-db ~> export PS1="\u@\h [\$(date +%k:%M:%S)]> "

ramesh@dev-db [11:09:56]>

Bạn cũng có thể sử dụng \ t để hiển thị thời gian hiện tại ở định dạng hh:mm:ss như được hiển thị bên dưới:

ramesh@dev-db ~> export PS1="\u@\h [\t]> "
ramesh@dev-db [12:42:55]>

Bạn cũng có thể sử dụng \ @ để hiển thị thời gian hiện tại ở định dạng 12 giờ sáng / chiều như được hiển thị bên dưới:

ramesh@dev-db ~> export PS1="[\@] \u@\h> "
[04:12 PM] ramesh@dev-db>

3. Hiển thị đầu ra của bất kỳ lệnh Linux nào trong dấu nhắc

Bạn có thể hiển thị đầu ra của bất kỳ lệnh Linux nào trong dấu nhắc. Ví dụ sau đây hiển thị ba mục được phân tách bằng | (pipe) trong dấu nhắc lệnh:

  • \ !: Số lịch sử của lệnh
  • \ h: tên máy chủ
  • $ kernel_version: Đầu ra của lệnh uname -r từ biến $ kernel_version
  • \ $ ?: Trạng thái của lệnh cuối cùng
ramesh@dev-db ~> kernel_version=$(uname -r)
ramesh@dev-db ~> export PS1="\!|\h|$kernel_version|\$?> "
473|dev-db|2.6.25-14.fc9.i686|0>

4. Thay đổi màu nền trước của lời nhắc

Hiển thị lời nhắc bằng màu xanh lam, cùng với tên người dùng, máy chủ lưu trữ và thông tin thư mục hiện tại

$ export PS1="\e[0;34m\u@\h \w> \e[m"
[Note: This is for light blue prompt]

$ export PS1="\e[1;34m\u@\h \w> \e[m"
[Note: This is for dark blue prompt]
  • \ e [ - Cho biết sự bắt đầu của lời nhắc màu
  • x; ym - Cho biết mã màu. Sử dụng các giá trị mã màu được đề cập bên dưới.
  • \ e [m - cho biết sự kết thúc của lời nhắc màu

Bảng mã màu:

Black 0;30
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
[Note: Replace 0 with 1 for dark color]

Làm cho màu thay đổi vĩnh viễn bằng cách thêm các dòng sau vào .bash_profile hoặc .bashrc

STARTCOLOR='\e[0;34m';
ENDCOLOR="\e[0m"
export PS1="$STARTCOLOR\u@\h \w> $ENDCOLOR"

5. Thay đổi màu nền của lời nhắc

Thay đổi màu nền bằng cách chỉ định \ e [{code} m trong lời nhắc PS1 như được hiển thị bên dưới.

$ export PS1="\e[47m\u@\h \w> \e[m"
[Note: This is for Light Gray background]

Sự kết hợp giữa nền và nền trước

export PS1="\e[0;34m\e[47m\u@\h \w> \e[m"
[Note: This is for Light Blue foreground and Light Gray background]

Thêm phần sau vào .bash_profile hoặc .bashrc để tạo màu nền ở trên và màu nền trước vĩnh viễn.

STARTFGCOLOR='\e[0;34m';
STARTBGCOLOR="\e[47m"
ENDCOLOR="\e[0m"
export PS1="$STARTFGCOLOR$STARTBGCOLOR\u@\h \w> $ENDCOLOR"

Chơi xung quanh bằng cách sử dụng màu nền sau và chọn màu phù hợp với sở thích của bạn:

  • \ e [40 phút
  • \ e [41 phút
  • \ e [42 phút
  • \ e [43 phút
  • \ e [44 phút
  • \ e [45 phút
  • \ e [46 phút
  • \ e [47 phút

6. Hiển thị nhiều màu trong lời nhắc

Bạn cũng có thể hiển thị nhiều màu trong cùng một lời nhắc. Thêm hàm sau vào .bash_profile

function prompt {
 local BLUE="\[\033[0;34m\]"
 local DARK_BLUE="\[\033[1;34m\]"
 local RED="\[\033[0;31m\]"
 local DARK_RED="\[\033[1;31m\]"
 local NO_COLOR="\[\033[0m\]"
 case $TERM in
 xterm*|rxvt*)
 TITLEBAR='\[\033]0;\u@\h:\w\007\]'
 ;;
 *)
 TITLEBAR=""
 ;;
 esac
 PS1="\u@\h [\t]> "
 PS1="${TITLEBAR}\
 $BLUE\u@\h $RED[\t]>$NO_COLOR "
 PS2='continue-> '
 PS4='$0.$LINENO+ '
}

Bạn có thể đăng nhập lại để các thay đổi có hiệu lực hoặc lấy nguồn .bash_profile như hình dưới đây.

$. ./.bash_profile
$ prompt
ramesh@dev-db [13:02:13]>

7. Thay đổi màu lời nhắc bằng tput

Bạn cũng có thể thay đổi màu của lời nhắc PS1 bằng cách sử dụng tput như hình dưới đây:

$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"

khả năng màu tput:

  • tput setab [1-7] - Đặt màu nền bằng cách sử dụng ANSI Escape
  • tput setb [1-7] - Đặt màu nền
  • tput setaf [1-7] - Đặt màu nền trước bằng cách sử dụng ANSI Escape
  • tput setf [1-7] - Đặt màu nền trước

Khả năng của Chế độ Văn bản tput:

  • in đậm - Đặt chế độ in đậm
  • tput mờ - bật chế độ nửa sáng
  • tput smul - bắt đầu chế độ gạch chân
  • tput rmul - thoát khỏi chế độ gạch chân
  • tput rev - Bật chế độ đảo ngược
  • nhập smso - Vào chế độ nổi bật (in đậm trên rxvt)
  • tput rmso - Thoát khỏi chế độ nổi bật
  • tput sgr0 - Tắt tất cả các thuộc tính

Mã màu cho đầu ra:

  • 0 - Đen
  • 1 - Màu đỏ
  • 2 - Màu xanh lá cây
  • 3 - Màu vàng
  • 4 - Màu xanh lam
  • 5 - Màu đỏ tươi
  • 6 - Màu lục lam
  • 7 - Màu trắng

8. Tạo lời nhắc của riêng bạn bằng cách sử dụng các mã có sẵn cho biến PS1

Sử dụng các mã sau và tạo lời nhắc PS1 Linux cá nhân của riêng bạn, có chức năng và phù hợp với sở thích của bạn. Mã nào từ danh sách này sẽ rất hữu ích cho việc sử dụng hàng ngày? Để lại nhận xét của bạn và cho tôi biết mã PS1 bạn đã sử dụng cho lời nhắc Linux của mình.

  • \ a một ký tự chuông ASCII (07)
  • \ d ngày ở định dạng "Ngày trong tuần, ngày trong tháng" (ví dụ:"Thứ ba ngày 26 tháng 5")
  • \ D {format} - định dạng được chuyển tới strftime (3) và kết quả được chèn vào chuỗi dấu nhắc; định dạng trống dẫn đến biểu diễn thời gian theo ngôn ngữ cụ thể. Các dấu ngoặc nhọn là bắt buộc
  • \ e một ký tự thoát ASCII (033)
  • \ h tên máy chủ cho đến phần đầu tiên
  • \ H tên máy chủ
  • \ j số lượng công việc hiện được quản lý bởi shell
  • \ l tên cơ sở của tên thiết bị đầu cuối của shell
  • \ n dòng mới
  • \ r dấu xuống dòng
  • \ s tên của trình bao, tên cơ sở của $ 0 (phần sau dấu gạch chéo cuối cùng)
  • \ t thời gian hiện tại ở định dạng HH:MM:SS 24 giờ
  • \ T thời gian hiện tại ở định dạng HH:MM:SS trong 12 giờ
  • \ @ thời gian hiện tại ở định dạng 12 giờ sáng / chiều
  • \ A thời gian hiện tại ở định dạng HH:MM 24 giờ
  • \ u tên người dùng của người dùng hiện tại
  • \ v phiên bản của bash (ví dụ:2,00)
  • \ V việc phát hành bash, phiên bản + cấp bản vá (ví dụ:2.00.0)
  • \ w thư mục làm việc hiện tại, với $ HOME được viết tắt bằng dấu ngã
  • \ W tên cơ sở của thư mục làm việc hiện tại, với $ HOME được viết tắt bằng dấu ngã
  • \! số lịch sử của lệnh này
  • \ # số lệnh của lệnh này
  • \ $ nếu UID hiệu dụng là 0 thì là #, nếu không thì là $
  • \ nnn ký tự tương ứng với số bát phân nnn
  • \\ dấu gạch chéo ngược
  • \ [ bắt đầu một chuỗi các ký tự không in, có thể được sử dụng để nhúng chuỗi điều khiển đầu cuối vào lời nhắc
  • \] kết thúc một chuỗi ký tự không in được

9. Sử dụng hàm bash shell bên trong biến PS1

Bạn cũng có thể gọi một hàm bash shell trong PS1 như được hiển thị bên dưới.

ramesh@dev-db ~> function httpdcount {
> ps aux | grep httpd | grep -v grep | wc -l
> }

ramesh@dev-db ~> export PS1="\u@\h [`httpdcount`]> "
ramesh@dev-db [12]>
[Note: This displays the total number of running httpd processes]

Bạn có thể thêm dòng sau vào .bash_profile hoặc .bashrc để thực hiện thay đổi này vĩnh viễn:

function httpdcount {
 ps aux | grep httpd | grep -v grep | wc -l
}
export PS1='\u@\h [`httpdcount`]> '

10. Sử dụng tập lệnh shell bên trong biến PS1

Bạn cũng có thể gọi một tập lệnh shell bên trong biến PS1. Trong ví dụ bên dưới, ~ / bin / totalfilesize.sh, tính toán tổng kích thước tệp của thư mục hiện tại, được gọi bên trong biến PS1.

ramesh@dev-db ~> cat ~/bin/totalfilesize.sh

for filesize in $(ls -l . | grep "^-" | awk '{print $5}')
do
 let totalsize=$totalsize+$filesize
done
echo -n "$totalsize"

ramesh@dev-db ~> export PATH=$PATH:~/bin
ramesh@dev-db ~> export PS1="\u@\h [\$(totalfilesize.sh) bytes]> "
ramesh@dev-db [534 bytes]> cd /etc/mail
ramesh@dev-db [167997 bytes]>
[Note: This executes the totalfilesize.sh to display the total
 file size of the current directory in the PS1 prompt]


Bạn đã thực hiện bao nhiêu tùy chỉnh cho PS1 của mình? PS1 của bạn có thể đánh bại Angelina Jolie? Để lại nhận xét và chia sẻ PS1 của bạn giá trị nhanh.

Đọc đề xuất

Bash Cookbook của Carl Albing, JP Vossen và Cameron Newham . Bash là một lớp vỏ rất mạnh mẽ. Cuốn sách này sẽ giúp bạn nắm vững bash shell và trở nên hiệu quả. Cho dù bạn là sysadmin, DBA hay một nhà phát triển, bạn phải viết shell script tại một số điểm. Một sysadmin khôn ngoan biết rằng một khi bạn đã thành thạo các kỹ thuật shell-script, bạn có thể đặt máy chủ của mình ở chế độ tự động thử nghiệm bằng cách để các shell-script thực hiện công việc khó khăn. Để chuyển đến chế độ tự động thử nghiệm của sysadmin, bạn chắc chắn cần phải nắm vững các ví dụ được cung cấp trong sách dạy nấu ăn này. Có một vài cuốn sách Bash shell yên tĩnh ngoài kia. Tuy nhiên, cuốn sách này dẫn đầu tất cả bằng cách đưa ra nhiều ví dụ chi tiết.
 
Đề xuất sách Linux bổ sung:12 Sách Linux tuyệt vời và cần thiết để làm giàu bộ não và thư viện của bạn
 
Nếu bạn thích bài viết này, vui lòng đánh dấu trang trên del.icio.us và Stumble it.