2015-01-28 17 views
11

Điều tôi muốn là lưu trữ đầu ra của lệnh git (chẳng hạn như trạng thái git) bên trong một biến trong một kịch bản lệnh shell. Khi tôi nói ra, tôi đang nói về văn bản trả lại trong nhà ga trên thực hiện một lệnh, ví dụ: vào làm một status git ngoài repo của tôi:Làm cách nào để lưu trữ kết quả đầu ra của lệnh git trong một biến?

fatal: Not a git repository (or any of the parent directories): .git 

Tôi cố gắng này:

var=$(git status) 

Nhưng 'var' không lưu trữ bất kỳ thứ gì.

+1

Ví dụ đầu ra có lẽ đã đi vào thiết bị lỗi chuẩn, và 'var' sẽ chứa những gì đã được gửi đến STDOUT. Bạn có thể sử dụng '2> & 1' để chuyển hướng cái cũ sang cái sau. – Biffen

+0

Cảm ơn, đầu ra trên thực tế đã đi đến STDERR. – aliasav

Trả lời

20

Bạn có thể sử dụng:

var=$(git status 2>&1) 

ví dụ: chuyển hướng stderr để stdout và sau đó bắt đầu ra.

Nếu không, khi có thông báo lỗi được viết trên stderr và lệnh của bạn: var=$(git status) chỉ chụp stdout.

+2

Cảm ơn rất nhiều! Bạn có thể vui lòng cung cấp bất kỳ liên kết tài liệu nào mà tôi có thể nghiên cứu hay không. (Tôi sẽ cung cấp cho bạn một cuộc bỏ phiếu nhưng repo thấp của tôi sẽ không cho phép nó.) – aliasav

+1

[Kiểm tra hướng dẫn này tốt đẹp về chuyển hướng] (http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO- 3.html) – anubhava

1

Thông báo đó xuất hiện trên lỗi chuẩn, theo mặc định $ (cmd) chỉ ghi lại tiêu chuẩn. Bạn có thể sửa lỗi bằng cách chuyển hướng lỗi chuẩn sang chuẩn - xem một trong các câu trả lời khác. Tuy nhiên bạn có thể sử dụng mã lối ra thay vì

  • 128 cho trường hợp này
  • 0 nếu không có lỗi.

Tôi rất muốn khuyên này trong cố gắng để phát hiện chuỗi "chết người: Không phải là một kho git ..."

foo=$(git status) 
fatal: Not a git repository (or any of the parent directories): .git 
echo $? 
128 

Bên cạnh đó có một tình trạng git --porcelain và --short mà rất hữu ích cho việc viết kịch bản.

Nếu bạn đang sử dụng Linux/OS X vv đầy đủ các chi tiết có tại man git-status

+0

Cảm ơn, phương pháp này sử dụng mã thoát là những gì tôi cần chính xác. – aliasav

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