2013-01-28 34 views
5

Tôi đang cố gắng để tạo ra một bí danh cho một lệnh để xem việc sử dụng bộ nhớ,bash_aliases và awk thoát của dấu ngoặc kép

ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}' 

nhưng, ngây thơ,

#.bash_aliases 
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'' 

cho lỗi:

-bash: alias: END: not found 
-bash: alias: {print: not found 
-bash: alias: sum/1024}: not found 

Tôi đã thử với dấu ngoặc kép,

totalmem ="ps ... |awk '{sum+=$1} END {print sum/1024}'", hoặc

totalmem ='ps ... |awk "{sum+=$1} END {print sum/1024}"', thoát,

totalmem ='ps ... |awk \'{sum+=$1} END {print sum/1024}\'', hoặc thoát dấu ngoặc kép ... nhưng tôi dường như không thể làm cho nó làm việc.

totalmem ='ps ... |awk \"{sum+=$1} END {print sum/1024}\"',

cung cấp cho các lỗi

awk: "{sum+=} 
awk:^unterminated string 

Bất cứ lời khuyên đánh giá cao.

+1

http: // www. unix.com/shell-programming-scripting/38249-define-alias-embeded-awk-command.html –

+2

Không bao giờ cần 'grep' với' awk '$ 0! ~/peruser/{sum + = $ 1} END {in sum/1024 } '' –

Trả lời

7

Bạn hầu như có nó, các $ sẽ được mở rộng trong hai dấu ngoặc kép, do đó cần thêm thoát:

alias totalmem='ps -u user -o rss,command | grep -v peruser | awk "{sum+=\$1} END {print sum/1024}"' 

Hoặc với mô hình bên awk theo đề nghị của iiSeymour:

alias totalmem='ps -u user -o rss,command | awk "!/peruser/ {sum+=\$1} END {print sum/1024}"' 
+3

nhờ thần búa. Tôi vừa tìm ra một giải pháp với 'alias memuse = 'ps -u user -o rss, lệnh | grep -v peruser | awk '"'" '{sum + = $ 1} END {in sum/1024}' "'"' ''nhưng của bạn là sạch hơn – Massagran

4

Như thế này:

alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '\''{sum+=$1} END {print sum/1024}'\' 

Giải thích: bạn có thể sử dụng loại khác nhau của dấu ngoặc kép cho lập luận tương tự, như "I'm double-quoted"'and I am $HOME-less'-and-i-am-not-quoted. Do đó nếu bạn cần một dấu nháy đơn bên trong dấu nháy đơn, bạn có thể thêm '\'' (1) chấm dứt trích dẫn đơn, (2) thêm dấu nháy đơn với \', (3) bắt đầu trích dẫn một lần nữa.

(Bí danh của kích thước này là thứ được thực hiện tốt hơn làm chức năng).

+0

cảm ơn lời giải thích – Massagran

11

Bạn có thể tránh vấn đề trích dẫn bằng cách sử dụng hàm vỏ thay vì bí danh:

totalmem() { 
    ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}' 
} 

Đây cũng là linh hoạt hơn, như bạn có thể cho phép totalmem để lấy đối số, chẳng hạn như một tên người dùng để vượt qua các -u tùy chọn ps, như trong ví dụ này:

totalmem() { 
    ps -u "$1" -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}' 
}