Trong bài đăng gần đây của tôi về cách thiết lập Ubuntu với tập lệnh Bash, tôi đã ám chỉ ngắn gọn đến sự kỳ diệu của .bashrc
. Điều này không thực sự đúng, vì vậy, đây là một bài đăng nhanh cung cấp một chút chi tiết hơn về những gì tệp cấu hình Bash có thể làm.
Cấu hình hiện tại của tôi cải thiện đáng kể quy trình làm việc của tôi và giúp tôi tiết kiệm hơn 50% số lần nhấn phím mà tôi sẽ phải sử dụng nếu không có nó! Hãy xem một số ví dụ về bí danh, chức năng và cấu hình nhắc nhở có thể cải thiện quy trình làm việc của chúng tôi bằng cách giúp chúng tôi hiệu quả hơn với ít lần nhấn phím hơn.
Bash aliases
.bashrc
được viết thông minh có thể tiết kiệm rất nhiều lần gõ phím. Chúng ta có thể tận dụng điều này theo nghĩa đen bằng cách sử dụng bí danh bash hoặc chuỗi mở rộng thành các lệnh lớn hơn. Đối với một ví dụ cụ thể, đây là bí danh Bash để sao chép tệp trong thiết bị đầu cuối:
# Always copy contents of directories (r)ecursively and explain (v) what was done
alias cp='cp -rv'
alias
lệnh xác định chuỗi mà chúng ta sẽ nhập, theo sau là chuỗi đó sẽ mở rộng thành. Chúng tôi có thể ghi đè các lệnh hiện có như cp
ở trên. Riêng nó, cp
lệnh sẽ chỉ sao chép tệp, không phải thư mục và thành công một cách âm thầm. Với bí danh này, chúng ta không cần nhớ chuyển hai cờ đó, cũng như cd
hoặc ls
vị trí của tệp đã sao chép của chúng tôi để xác nhận rằng tệp ở đó! Bây giờ, chỉ cần nhấn hai phím đó (cho c
và d
) sẽ làm tất cả những điều đó cho chúng tôi.
Đây là một số .bashrc
khác bí danh để chuyển cờ với các chức năng phổ biến.
# List contents with colors for file types, (A)lmost all hidden files (without . and ..), in (C)olumns, with class indicators (F)
alias ls='ls --color=auto -ACF'
# List contents with colors for file types, (a)ll hidden entries (including . and ..), use (l)ong listing format, with class indicators (F)
alias ll='ls --color=auto -alF'
# Explain (v) what was done when moving a file
alias mv='mv -v'
# Create any non-existent (p)arent directories and explain (v) what was done
alias mkdir='mkdir -pv'
# Always try to (c)ontinue getting a partially-downloaded file
alias wget='wget -c'
Bí danh cũng có ích khi chúng ta muốn tránh nhập các lệnh dài. Dưới đây là một số tôi sử dụng khi làm việc với môi trường Python:
alias pym='python3 manage.py'
alias mkenv='python3 -m venv env'
alias startenv='source env/bin/activate && which python3'
alias stopenv='deactivate'
Để có thêm cảm hứng về các cách bí danh Bash có thể tiết kiệm thời gian, tôi thực sự khuyên bạn nên sử dụng các ví dụ trong bài viết này.
Hàm băm
Một nhược điểm của các bí danh ở trên là chúng khá tĩnh - chúng sẽ luôn mở rộng đến chính xác văn bản được khai báo. Đối với bí danh Bash nhận đối số, chúng tôi sẽ cần tạo một hàm. Chúng ta có thể làm như vậy:
# Show contents of the directory after changing to it
function cd () {
builtin cd "$1"
ls -ACF
}
Tôi không thể bắt đầu đếm số lần tôi đã nhập cd
rồi đến ls
ngay sau đó để xem nội dung của thư mục hiện tôi đang ở. Với chức năng này được thiết lập, tất cả chỉ xảy ra với hai chữ cái đó! Hàm nhận đối số đầu tiên, $1
, làm vị trí để thay đổi thư mục, sau đó in nội dung của thư mục đó trong các cột được định dạng độc đáo với các chỉ báo loại tệp. builtin
một phần là cần thiết để Bash cho phép chúng tôi ghi đè lệnh mặc định này.
Các chức năng Bash cũng rất hữu ích khi tải xuống hoặc nâng cấp phần mềm. Trước đây, tôi đã dành ít nhất vài phút mỗi vài tuần để tải xuống phiên bản mở rộng mới của trình tạo trang tĩnh Hugo, nhờ tần suất vận chuyển tuyệt vời của chúng. Với một chức năng, tôi chỉ cần vượt qua phiên bản và quá trình nâng cấp sẽ diễn ra sau vài giây.
# Hugo install or upgrade
function gethugo () {
wget -q -P tmp/ https://github.com/gohugoio/hugo/releases/download/v"$@"/hugo_extended_"$@"_Linux-64bit.tar.gz
tar xf tmp/hugo_extended_"$@"_Linux-64bit.tar.gz -C tmp/
sudo mv -f tmp/hugo /usr/local/bin/
rm -rf tmp/
hugo version
}
$@
ký hiệu chỉ đơn giản là lấy tất cả các đối số đã cho, thay thế vị trí của nó trong hàm. Để chạy hàm trên và tải xuống phiên bản Hugo 0.57.2, chúng ta sử dụng lệnh gethugo 0.57.2
.
Tôi cũng có một cái cho Golang:
function getgolang () {
sudo rm -rf /usr/local/go
wget -q -P tmp/ https://dl.google.com/go/go"$@".linux-amd64.tar.gz
sudo tar -C /usr/local -xzf tmp/go"$@".linux-amd64.tar.gz
rm -rf tmp/
go version
}
Hoặc làm thế nào về một chức năng thêm URL gốc từ xa cho GitLab vào kho lưu trữ hiện tại?
function glab () {
git remote set-url origin --add [email protected]:"$@"/"${PWD##*/}".git
git remote -v
}
Với glab username
, chúng tôi có thể tạo một origin
mới URL cho kho lưu trữ Git hiện tại với username
của chúng tôi trên GitLab.com. Việc đẩy đến một URL từ xa mới sẽ tự động tạo một kho lưu trữ GitLab riêng tư mới, vì vậy đây là một lối tắt hữu ích để tạo bản sao lưu!
Các hàm Bash thực sự chỉ bị giới hạn bởi các khả năng của kịch bản, trong thực tế, có rất ít giới hạn. Nếu có bất kỳ điều gì chúng tôi làm thường xuyên yêu cầu nhập một vài dòng vào một thiết bị đầu cuối, chúng tôi có thể tạo một hàm Bash cho nó!
Dấu nhắc băm
Bên cạnh nội dung thư mục, việc xem đường dẫn đầy đủ của thư mục mà chúng tôi đang ở cũng rất hữu ích. Lời nhắc Bash có thể hiển thị cho chúng tôi đường dẫn này cùng với thông tin hữu ích khác như chi nhánh Git hiện tại của chúng tôi. Để làm cho nó dễ đọc hơn, chúng ta có thể xác định màu sắc cho từng phần của lời nhắc. Đây là cách chúng tôi có thể thiết lập lời nhắc của mình trong .bashrc
để thực hiện điều này:
# Colour codes are cumbersome, so let's name them
txtcyn='\[\e[0;96m\]' # Cyan
txtpur='\[\e[0;35m\]' # Purple
txtwht='\[\e[0;37m\]' # White
txtrst='\[\e[0m\]' # Text Reset
# Which (C)olour for what part of the prompt?
pathC="${txtcyn}"
gitC="${txtpur}"
pointerC="${txtwht}"
normalC="${txtrst}"
# Get the name of our branch and put parenthesis around it
gitBranch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
# Build the prompt
export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} "
Kết quả:
~/github/myrepo (master) $
Đặt tên cho các màu giúp dễ dàng xác định vị trí bắt đầu và dừng lại của một màu và vị trí bắt đầu của màu tiếp theo. Lời nhắc mà chúng tôi thấy trong thiết bị đầu cuối của chúng tôi được xác định bởi chuỗi sau export PS1
, với mỗi thành phần của dấu nhắc được đặt bằng một chuỗi thoát. Hãy chia nhỏ điều đó:
-
\w
hiển thị thư mục làm việc hiện tại, -
\$(gitBranch)
gọigitBranch
được định nghĩa ở trên, hiển thị nhánh Git hiện tại, -
\$
sẽ hiển thị “$” nếu bạn là người dùng bình thường hoặc ở chế độ người dùng bình thường và “#” nếu bạn là root.
Danh sách đầy đủ các trình tự thoát Bash có thể giúp chúng tôi hiển thị nhiều bit thông tin hơn, bao gồm cả ngày và giờ! Lời nhắc Bash có khả năng tùy chỉnh cao và riêng lẻ, vì vậy hãy thoải mái thiết lập nó theo bất kỳ cách nào bạn muốn.
Dưới đây là một số tùy chọn đưa thông tin lên trước và trung tâm và có thể giúp chúng tôi làm việc hiệu quả hơn.
Dành cho sự trì hoãn-không thích
Tên người dùng và thời gian hiện tại tính theo giây, ở định dạng HH:MM:SS 24 giờ:
export PS1="${userC}\u ${normalC}at \t >"
user at 09:35:55 >
Dành cho những người luôn muốn biết vị trí của họ
Đường dẫn đầy đủ của tệp trên một dòng riêng biệt và tên người dùng:
export PS1="${pathC}\w${normalC}\n\u:"
~/github/myrepo
user:
Đối với sự tối giản
export PS1=">"
>
Chúng ta có thể xây dựng nhiều lời nhắc thiết thực chỉ với các trình tự thoát cơ bản; một khi chúng ta bắt đầu tích hợp các chức năng với lời nhắc, như trong ví dụ nhánh Git, mọi thứ có thể trở nên thực sự phức tạp. Cho dù lượng phức tạp này là một bổ sung hay phương hại đến năng suất của bạn, chỉ bạn mới có thể biết chắc chắn!
Nhiều lời nhắc Bash ưa thích có thể thực hiện được với các chương trình có sẵn bằng cách tìm kiếm nhanh. Tôi cố ý không cung cấp các mẫu ở đây bởi vì, nếu bạn có thể có xu hướng hào hứng với nội dung này như tôi có thể, có thể mất vài giờ trước khi bạn quay lại những gì bạn đang làm trước khi bạn bắt đầu đọc bài đăng này, và Tôi không thể có điều đó với lương tâm của tôi. ?
Chúng tôi hy vọng hiện đã đạt được sự cân bằng tốt đẹp giữa thời gian đầu tư và tính hữu ích thu được từ tệp cấu hình Bash của chúng tôi! Tôi hy vọng bạn sử dụng tốt khả năng gõ phím mới khôi phục của mình.