Lệnh shell làm việc không bí danh


2

Tôi có thể chạy,

 svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/!d' |xargs ls -altr --color=auto

bình thường. Nhưng khi tôi thêm phần này dưới dạng bí danh (bí danh svtr = "...") tôi gặp lỗi khi nói ...

-bash: !d': event not found

Có ý kiến ​​gì không?

Câu trả lời:


2

Sử dụng dấu gạch chéo ngược \ để thoát khỏi của bạn ! nên làm việc.

alias svtr="svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/\!d' |xargs ls -altr --color=auto"
alias svtr
alias svtr='svn status |grep -v .jasper$ |cut -d '\'' '\'' -f8 |sed '\''/.*\..*/\!d'\'' |xargs ls -altr --color=auto'

Trên thực tế, điều đó chỉ giúp loại bỏ lỗi, bởi vì bên trong "" cái vỏ cố gắng diễn giải !.

bạn có thể muốn hoàn nguyên các trích dẫn (nghĩa là sử dụng một từ đơn để xác định bí danh và sử dụng doublequote bên trong lệnh bí danh và thoát các câu đơn khi cần thiết.


Cảm ơn! Giải pháp thứ hai hoạt động sau khi tôi loại bỏ ký tự thoát trước mặt!
JJRhythm

2

Các !d trong bạn sed lệnh gây ra điều này, bởi vì ! là nhân vật mở rộng lịch sử Bash. Tạm thời tắt mở rộng lịch sử, như thế này:

set -H
alias svtr="..."
set +H

Nên làm vậy.


Tôi đã thử điều này và nhận được lỗi tương tự.
JJRhythm

Xin lỗi, nhưng nó làm việc cho tôi.
Fran
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.