Tôi muốn lặp qua máy ảo đang chạy của mình và chỉ trả về những gì nằm giữa dấu ngoặc kép.Lấy danh sách các máy ảo đang chạy bằng cách sử dụng VBoxManage
Vì vậy, lệnh này:
VBoxManage list runningvms
lợi nhuận:
"UbuntuServer" {7ef01f8d-a7d5-4405-af42-94d85f999dff}
Và tôi chỉ muốn nó trở lại:
UbuntuServer
Đây là những gì tôi có cho đến nay (thất bại):
#!/bin/bash
for machine in `cat VBoxManage list runningvms`; do
echo "$machine"
done
exit
Cách tiếp cận "cổ điển" là thực hành không tốt, cũng như phương pháp 'mảng = ($ (...))'; cả hai, ví dụ, sẽ thay thế một mã thông báo duy nhất '*' trong đầu vào của bạn bằng một danh sách các tệp trong thư mục hiện tại. Xem [Don't Read Lines With For] (http://mywiki.wooledge.org/DontReadLinesWithFor), [BashPitfalls # 50] (http://mywiki.wooledge.org/BashPitfalls#hosts.3D.28_.24.28aws_ … 29_.29) và [BashFAQ # 1] (http://mywiki.wooledge.org/BashFAQ/001) –
Cần tách từ cho ví dụ cụ thể này và tên VM khớp với mẫu hình cầu có vẻ không chắc. – Mat
Sự kiện mất dữ liệu tồi tệ nhất mà tôi có mặt đã xảy ra vì ai đó đã bỏ qua một sự kiện "không thể" (một chương trình tạo tệp "không thể bao giờ" tạo ra bất kỳ thứ gì không khớp với [0-9a-f] {24}; trong thư viện của bên thứ ba đã làm hỏng một con trỏ, đổ rác ngẫu nhiên đã xảy ra để bao gồm một khoảng trắng được bao quanh '*' vào bộ đệm được sử dụng cho tên ... và một kịch bản shell lặp qua tên tệp đến tuổi ra khỏi hệ thống sao lưu rồi xóa *mọi điều*). –