Bảy biến Bash bất ngờ

Tiếp tục loạt bài viết về ít được biết đến hơn chức năng bash, tôi sẽ chỉ cho bạn bảy biến mà có thể bạn chưa biết.

1) PROMPT_COMMAND

Bạn có thể đã biết cách thao tác với lời nhắc để hiển thị nhiều thông tin hữu ích khác nhau, nhưng không phải ai cũng biết rằng bạn có thể chạy lệnh shell mỗi khi lời nhắc được hiển thị.

Trên thực tế, nhiều trình thao tác dấu nhắc phức tạp sử dụng biến này để thực thi các lệnh nhằm thu thập thông tin được hiển thị trong dấu nhắc.

Hãy thử chạy cái này trong một shell mới và xem điều gì xảy ra với phiên:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Nếu chạy history trong bảng điều khiển, bạn sẽ nhận được danh sách các lệnh được thực thi trước đó trong tài khoản của mình.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Khi biến này được đặt, các mục mới sẽ ghi lại thời gian cùng với lệnh, vì vậy kết quả đầu ra sẽ như thế này:

1871 Tôi chạy cái này lúc: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Tôi chạy cái này lúc: 01/05/19 13:38:19 Curl bbc.co.uk 1873 Tôi chạy cái này lúc : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Tôi đã chạy cái này vào lúc: 01/05/19 13:39:18curl -vvv bbc.co.uk 1876 Tôi đã chạy cái này vào lúc: 01 /05/19 13:39:25 sudo su -

Định dạng khớp với các ký tự từ man date.

3) CDPATH

Để tiết kiệm thời gian trên dòng lệnh, bạn có thể sử dụng biến này để thay đổi thư mục dễ dàng như khi bạn ra lệnh.

như PATH, Biến đổi CDPATH là một danh sách các đường dẫn được phân tách bằng dấu hai chấm. Khi bạn chạy lệnh cd với một đường dẫn tương đối (tức là không có dấu gạch chéo ở đầu), theo mặc định, shell sẽ tìm trong thư mục cục bộ của bạn để tìm tên trùng khớp. CDPATH sẽ tìm kiếm trong các đường dẫn bạn đã cung cấp cho thư mục bạn muốn truy cập.

Nếu bạn cài đặt CDPATH theo cách này:

$ CDPATH=/:/lib

và sau đó nhập:

$ cd /home
$ cd tmp

thì bạn sẽ luôn kết thúc ở /tmp Bất kể là bạn ở đâu.

Tuy nhiên, hãy cẩn thận, vì nếu bạn không chỉ định địa chỉ cục bộ trong danh sách (.) thì bạn sẽ không thể tạo thư mục nào khác tmp và đi đến nó như bình thường:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Ối!

Điều này tương tự như sự nhầm lẫn mà tôi cảm thấy khi nhận ra rằng thư mục cục bộ không được đưa vào biến quen thuộc hơn PATH... nhưng bạn phải thực hiện điều đó trong biến PATH của mình vì bạn có thể bị lừa chạy lệnh giả từ một số mã đã tải xuống.

Của tôi được đặt theo điểm bắt đầu:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Bạn đã bao giờ thắc mắc, gõ exit nó sẽ đưa bạn ra khỏi shell bash hiện tại của bạn sang shell "cha mẹ" khác hay nó sẽ đóng hoàn toàn cửa sổ bảng điều khiển?

Biến này theo dõi mức độ lồng sâu của bạn trong bash shell. Nếu bạn tạo một thiết bị đầu cuối mới, nó được đặt thành 1:

$ echo $SHLVL
1

Sau đó, nếu bạn bắt đầu một tiến trình shell khác, con số sẽ tăng lên:

$ bash
$ echo $SHLVL
2

Điều này có thể rất hữu ích trong các tập lệnh mà bạn không chắc chắn có nên thoát hay không hoặc theo dõi xem mình đang được lồng vào đâu.

5) LINENO

Biến này cũng hữu ích để phân tích trạng thái hiện tại và gỡ lỗi LINENO, báo cáo số lượng lệnh được thực hiện trong phiên cho đến nay:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Điều này thường được sử dụng nhất khi gỡ lỗi các tập lệnh. Chèn các dòng như echo DEBUG:$LINENO, bạn có thể nhanh chóng xác định mình đang ở đâu trong tập lệnh (hoặc không).

6) REPLY

Nếu, giống như tôi, bạn thường viết mã như thế này:

$ read input
echo do something with $input

Có thể bạn sẽ ngạc nhiên khi không cần phải lo lắng về việc tạo biến:

$ read
echo do something with $REPLY

Điều này làm điều tương tự.

7) TMOUT

Để tránh ở trên máy chủ sản xuất quá lâu vì lý do bảo mật hoặc vô tình chạy thứ gì đó nguy hiểm trong thiết bị đầu cuối sai, việc đặt biến này đóng vai trò như một biện pháp bảo vệ.

Nếu không có gì được nhập trong một số giây đã đặt, shell sẽ thoát.

Tức là đây là một giải pháp thay thế sleep 1 && exit:

$ TMOUT=1

Nguồn: www.habr.com

Thêm một lời nhận xét