2011-06-28 36 views
6

Tôi có một loạt lệnh mà tôi chạy trước khi cam kết một dự án git vì vậy tôi đã đặt nó trong một tập lệnh bash. Cuối cùng tôi có một khối mà không cam kết:bash: truyền đối số tập lệnh

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m $1; fi 

với kỳ vọng rằng thông điệp được truyền cho các kịch bản

$ ./dostuff_then_commit "my message" 

Khi tôi làm điều này, tôi nhận được rằng

fatal: Paths with -a does not make sense. 

$1 đã được xác định nhưng thông báo không được truyền chính xác? Bất cứ ai có thể nhìn thấy vấn đề và/hoặc đề xuất một giải pháp? Cảm ơn SO.

Trả lời

6

Nếu thư chứa dấu cách, nó sẽ mở rộng thành nhiều thông số thành git commit. (Chú ý trích dẫn trong trường hợp khác.) Trích nó:

if [ -z "$1" ]; then 
    git commit -a -m "no message" 
else 
    git commit -a -m "$1" 
fi 

Một vài phụ lục:

  • Tôi cũng trích dẫn một trong [], vì một lý do hơi khác nhau: nếu cam kết thông báo trống, bạn sẽ nhận được chẩn đoán tham số bị thiếu từ [. Một lần nữa, trích dẫn nó tránh điều này. (Thay vào đó, bạn có thể muốn nắm bắt điều đó và khiến người dùng nhập một thông báo cam kết thực sự, mặc dù nếu cần thiết, bạn có thể nhận được một bó asdfzxcv thông báo cam kết ....)

  • Thông báo lỗi bạn ' việc nhận lại là đặc biệt bởi vì từ đầu tiên của thông điệp cam kết được lấy làm thông báo cam kết và phần còn lại được chuyển thành tên tệp cụ thể để cam kết; điều này, như thông báo lỗi nói, không có ý nghĩa khi nói git để cam kết mọi thứ (-a).

+0

Cám ơn các bit thêm đó. – hatmatrix

2

Cố gắng bao quanh $1 với dấu ngoặc kép - nếu không git nghĩ my là thông điệp và message là cái gì khác.

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m "$1"; fi 
1

bạn nên sử dụng "$1" thay vì $1 as $ 1` có thể có khoảng trống trong đó.

với $1 như my message thay thế trong:

git commit -a -m $1 

cho:

git commit -a -m my message 

khi:

git commit -a -m "$1" 

cho:

git commit -a -m "my message" 
2

Tôi chỉ muốn thêm mà bạn có thể kết hợp các tùy chọn như vậy:

git commit -am "some message" 
+0

ah, cảm ơn ..... – hatmatrix

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