Điểm:1

Tập lệnh Bash tạm dừng sau khi mở mysql

lá cờ br

Tôi đang cố gắng viết một tập lệnh sẽ xử lý một số công việc bảo trì trên máy chủ Ubuntu của chúng tôi cho những người thậm chí còn ít hiểu biết về Linux hơn tôi.

Khi tôi chạy tập lệnh với tư cách quản trị viên (cần thiết để truy cập mysql), nó sẽ nhắc tôi nhập đúng mật khẩu, lệnh mysql bắt đầu thành công, nhưng các lệnh sau không chạy. Terminal chỉ nằm đó và không tiếp tục hoặc không thành công.

Bất kỳ ý tưởng nào tôi đang làm sai sẽ rất hữu ích.Tôi đã thực hiện một số nghiên cứu nhưng không có giải pháp nào sắp tới và khá khó với Google.

#! /bin/sh
mysql -p sương mù

XÓA TỪ `hosts` Ở ĐÂU `hostID` = '0';
#more XÓA lệnh ở đây, loại bỏ cho ngắn gọn
XÓA TỪ nhiệm vụ NƠI taskTypeId=8;

$Shell
Điểm:0
lá cờ hr

Các mysql lệnh mong muốn đọc các lệnh từ đầu vào tiêu chuẩn. Bạn có thể cung cấp điều này trong tập lệnh bằng cách sử dụng tài liệu ở đây:

#! /bin/sh

mysql -p sương mù <<'EOF'
XÓA TỪ 'máy chủ' Ở ĐÂU 'hostID' = '0';
#more XÓA lệnh ở đây, loại bỏ cho ngắn gọn
XÓA TỪ nhiệm vụ NƠI taskTypeId=8;
EOF

Kiểm soát sẽ trở lại trình bao sau khi mysql thoát lệnh. Trích dẫn đầu tiên 'EOF' (hoặc tốt như nhau \EOF hoặc "EOF") ngăn trình bao mở rộng nội dung - không phải là vấn đề đối với các lệnh trong ví dụ của bạn, nhưng đại loại như CHỌN * TỪ nếu không sẽ mở rộng * vào một danh sách các tập tin. chuỗi thực tế EOF là tùy ý.

GBarron avatar
lá cờ br
Cảm ơn- Tôi tin rằng điều này trả lời câu hỏi của tôi. Tuy nhiên, tôi thực sự không thể chắc chắn liệu nó có hoạt động hay không. Khi tôi sử dụng tài liệu ở đây theo khuyến nghị, Terminal sẽ đóng gần như ngay lập tức sau khi nhập mật khẩu của tôi. Nó * có thể * đang hoạt động, nhưng tôi không chắc tại sao $shell ở cuối tập lệnh không giữ cho Terminal mở. Tôi chủ yếu chỉ muốn đảm bảo mọi thứ đang chạy đúng.
GBarron avatar
lá cờ br
Tôi cũng đang đọc thêm các tài liệu ở đây- những thứ gọn gàng. Về cơ bản, tôi hoàn toàn mới với bash... Tôi biết những điều cơ bản về điều hướng Terminal và tôi có một số kinh nghiệm với PowerShell, nhưng nếu không thì tôi hoàn toàn mới với bash.
lá cờ hr
@GBarron Tôi khuyên bạn nên chạy tập lệnh từ trình bao tương tác cho đến khi bạn gỡ lỗi xong. Nếu bạn *phải* chạy nó từ một loại trình khởi chạy nào đó, thì việc thêm lệnh `read` sẽ giữ cho thiết bị đầu cuối mở cho đến khi nhấn một phím. Nếu bạn muốn giữ nó mở bằng cách bắt đầu một trình bao mới, bạn có thể cần chữ hoa `$SHELL` thay vì `$shell` (theo mặc định sẽ không được đặt thành bất kỳ thứ gì).
GBarron avatar
lá cờ br
Cảm ơn một lần nữa- bạn nói đúng, tôi đã nhầm `$SHELL`. `
GBarron avatar
lá cờ br
Ngoài ra, sau khi tôi nhập mật khẩu, tôi nhận được: ```ERROR 1064 (42000) ở dòng 2: Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MariaDB của bạn để biết đúng cú pháp sử dụng gần 'WHERE = '0'' ở dòng 1 ``` Tuy nhiên, tôi biết lệnh này hoạt động khi được nhập thủ công.
lá cờ hr
@GBarron nếu bạn không trích dẫn `EOF` và sử dụng các trích dẫn ngược xung quanh `hostID` như trong bản gốc của bạn thì trình bao sẽ coi nó như một lệnh thay thế. Vì có thể không có lệnh `hostID`, kết quả sẽ trống dẫn đến cú pháp sai `WHERE = '0'`
GBarron avatar
lá cờ br
Tôi thấy- cảm ơn một lần nữa cho thời gian của bạn. Đặt dấu ngoặc kép trở lại và sửa vỏ. Lệnh vẫn mở ngay bây giờ. Tôi không thấy bất kỳ đầu ra nào từ mysql, điều này thật lạ, nhưng tôi tin rằng nó hiện đang hoạt động.
Điểm:0
lá cờ in

Một khả năng khác là tạo 2 tệp: một cho tập lệnh bash của bạn (giả sử mybash, cái còn lại cho các lệnh SQL (mydeletes.sql):

mybash

#! /bin/sh

mysql -p sương mù <<mydeletes.sql

mydeletes.sql

XÓA TỪ 'máy chủ' Ở ĐÂU 'hostID' = '0';
#more XÓA lệnh ở đây, loại bỏ cho ngắn gọn
XÓA TỪ nhiệm vụ NƠI taskTypeId=8;

Điều này sẽ tách mã SQL khỏi mã bash. Nó sẽ cho phép bạn tải, thực thi và gỡ lỗi tập lệnh SQL của bạn trong nhiều (nếu không phải tất cả) công cụ SQL (DBeaver, Workbench,...)

GBarron avatar
lá cờ br
Cảm ơn Marc, một câu trả lời thay thế tốt khác!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.