2013-01-03 32 views
5

Làm cách nào để viết một hàm mà Bash bỏ qua $ trong lệnh đầu tiên? Tôi muốn điều này bởi vì đôi khi khi tôi dán lệnh từ web, nó bao gồm một ký tự đầu tiên là $.

$ ls nên làm ls hoặc $ grep 'foo' nên làm grep 'foo'.

Điều này sẽ không hoạt động vì $ không phải là tên hàm hợp lệ.

function $ { 
    ... 
} 
+5

không sao chép nó để bắt đầu với? rằng '$' được sử dụng để chỉ ra dấu nhắc trình bao. –

+1

@MarcB Tôi quá lười biếng để làm điều đó. Tôi thích viết một chương trình và làm cho cuộc sống của tôi dễ dàng hơn – Mohsen

Trả lời

9

Tạo một tập tin gọi $ ở đâu đó trên bạn $PATH, ví dụ trong ~/bin:

cd ~/bin 
cat <<'EOF' > \$ 
#!/bin/sh 
"[email protected]" 
EOF 

Làm cho nó thực thi:

chmod 755 \$ 

Và tận hưởng những điên rồ:

$ ls -l 
total 92 
-rwxr-xr-x 1 thomas thomas 13 Jan 3 19:09 $ 
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ls 
total 92 
-rwxr-xr-x 1 thomas thomas 13 Jan 3 19:09 $ 
+2

+1 ý tưởng hay. Bạn nên sử dụng '" $ @ "' mặc dù, để xử lý đúng đối số bằng khoảng trắng. Tôi nghĩ một hàm sẽ tốt hơn một kịch bản, nhưng bash không cho phép '$' làm tên hàm. –

+0

Cảm ơn, đã sửa nó. – Thomas

+1

Một mẹo khác: đặt dấu nháy đơn xung quanh dấu phân cách heredoc đầu tiên. Điều đó có hiệu quả đơn báo giá toàn bộ heredoc và bạn sẽ không phải thoát khỏi các biến: 'cat <<'EOF' > '$'' –

Các vấn đề liên quan