bashrc lười thay thế


10

Làm thế nào để người ta có được ~/.bashrcbí danh để đánh giá $()sự thay thế trong thời gian chạy , thay vì tại thời điểm ~ / .bashrc được thực thi (khi mở một thiết bị đầu cuối)?

Tôi chạy lệnh này thường xuyên đủ để tôi muốn thêm bí danh cho nó:

svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff

Tuy nhiên, khi tôi thêm nó vào ~/.bashrcdưới dạng bí danh, tôi thấy rằng các đánh giá được mã hóa cứng với các giá trị mà chúng có tại thời điểm tôi mở thiết bị đầu cuối:

$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'

Nếu tôi mở một thiết bị đầu cuối ~thì tôi gặp lỗi:

svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
$ alias
alias svnbranch='svn diff -r :HEAD  | colordiff'
$

Tôi đã thử hai biến thể của bí danh này ~/.bashrc, cả hai đều có cùng tác dụng (như tôi mong đợi):

alias svnbranch="svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff"
alias svnbranch="svn diff -r `svn info | grep ^Revision | awk {'print $2'}`:HEAD `svn info | grep ^URL | awk {'print $2'}` | colordiff"

Làm thế nào để có được ~/.bashrcbí danh để đánh giá $()sự thay thế trong thời gian chạy ?

Ngoài ra, làm thế nào một người tìm kiếm tình huống này trong Google? Tôi đã cố gắng google về "thay thế bashrc", "thay thế lười biếng bashrc" và các cụm từ chính khác, nhưng tôi không tìm thấy gì cho những gì tôi cảm thấy nên là một vấn đề đủ phổ biến để tìm thông tin.


2
Tại sao nó phải là bí danh? Di chuyển nó đến một kịch bản shell và được thực hiện với nó. Hầu hết các hệ thống loại * ix được đưa $HOME/binvào PATHnếu bạn có một thư mục như vậy ngày nay.
Warren Young

@WarrenYoung: Bạn đã đúng, trường hợp cụ thể này có thể là một tập lệnh. Tuy nhiên, tôi vẫn muốn biết câu trả lời vì tôi thích bí danh cho những thứ khác và tôi chắc chắn sẽ gặp phải điều này. Tôi có thể khái quát câu hỏi của bạn thành "tại sao Bash hỗ trợ bí danh khi bất cứ điều gì có thể là một kịch bản."
dotancohen

Tại sao các downvote? Làm thế nào tôi có thể cải thiện câu hỏi? Tôi đã cung cấp các ví dụ, các lần thử thất bại và thậm chí cả các cụm từ khóa mà tôi đã cố gắng tìm kiếm trên google.
dotancohen

@dotancohen: Tôi nghĩ bạn nên hỏi riêng điều đó. Tôi sẽ trả lời một phần ở đây : alias cdp="cd ~/projects". Không thể làm điều đó trong một kịch bản shell.
Warren Young

Câu trả lời:


11

Sử dụng dấu ngoặc đơn để ngăn chặn xử lý các ký tự đặc biệt. Bạn cũng có thể gạch chéo lại $ s.

Đối với một lệnh phức tạp, có lẽ bạn nên sử dụng một chức năng trong mọi trường hợp, điều này không yêu cầu thoát và dễ đọc và chỉnh sửa hơn:

svnbranch() {
    svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
}

Bạn có thể định nghĩa một hàm bất cứ nơi nào bạn có thể xác định bí danh.


2
awkcũng có một không gian mẫu vì awk '/^Revision/{ print ...}' vậy không cần grep trong trường hợp này.
Valentin Bajrami
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.