2015-05-13 15 views
5

Làm cách nào để thực hiện ba lệnh trên một dòng lệnh trong Linux? Tôi cố gắng dưới đây:Thực thi ba lệnh trong dòng lệnh đơn trong Linux

sudo -u oracle -i ; cd /lo2/ram/daska; ./script.sh

Khi tôi thực hiện điều này chỉ lệnh sudo được thực hiện.

Xin cho biết tôi

Trả lời

3

Sau khi thực hiện sudo có một trình bao mới và phần còn lại của "lệnh" không phải là một phần của nó mà là một phần của trình bao gốc. Bạn có thể làm:

sudo -u oracle -i bash -c "cd /lo2/ram/daska && ./script.sh" 

Hoặc trực tiếp,

sudo -u oracle -i /lo2/ram/daska/script.sh 
+0

sau này phụ thuộc vào nếu kịch bản cần thư mục làm việc cụ thể này hay không ... – glglgl

+0

Vâng, đó là một điểm hợp lệ. –

4

Sử dụng & & tách

sudo -u oracle -i && cd /lo2/ram/daska && ./script.sh 
+1

chỉ cần nhớ rằng khi sử dụng '&&' nếu bất kỳ lệnh nào trong chuỗi không thành công, phần còn lại sẽ không được thực thi – frost

+0

Không, điều này không hoạt động tôi đã thử với dấu chấm phẩy và && biểu tượng. ..xin vui lòng kiểm tra lại –

+1

Nếu tất cả các lệnh thành công, sau đó thay thế ';' bằng '&&' sẽ không có sự khác biệt. Trong mọi trường hợp, đây không phải là vấn đề và không giải quyết được câu hỏi. –

3

Bạn cũng có thể sử dụng dấu chấm phẩy để tách lệnh của bạn

sudo -u oracle -i ; cd /lo2/ram/daska ; ./script.sh 

Sự khác biệt giữa việc sử dụng & & và dấu chấm phẩy là nếu bạn muốn thực hiện mỗi lệnh chỉ khi lệnh trước đó khởi động eds, sau đó bạn có thể sử dụng toán tử & &. Tuy nhiên, nếu bạn muốn thực hiện các lệnh, bất kể lệnh nào đã thực thi hay không, bạn có thể sử dụng dấu chấm phẩy (;) để tách các lệnh.

+0

Không, điều này không làm việc tôi đã thử với dấu chấm phẩy và && biểu tượng, thực hiện lệnh đầu tiên của nó .. xin vui lòng kiểm tra lại –

+0

@Ramdas: - Bạn có thấy câu trả lời được đưa ra bởi glglgl 'sudo -u oracle sh -c 'cd/lo2/ram/daska; ./script.sh'' –

+0

Có, nhưng hồ sơ oracle không nhận được ở đó khi tôi sử dụng lệnh trên với -i .. Tôi nhận được lỗi không sqlplus lệnh không tìm thấy, Khi tôi thực hiện lệnh bằng tay làm việc của nó tốt –

3

Tôi sẽ chỉ thêm vào câu trả lời của Piperoman và Rahul rằng với && lệnh sau chỉ được thực hiện nếu thành công đầu tiên và với ; lệnh sau luôn được thực hiện.

Vì vậy

sudo -u oracle -i ; cd /lo2/ram/daska ; ./script.sh

nếu bạn không quan tâm cho dù tất cả mọi thứ trong thực thi chuỗi, và

sudo -u oracle -i && cd /lo2/ram/daska && ./script.sh

nếu bạn làm.

3

Nếu bạn làm

sudo -u oracle -i ; cd /lo2/ram/daska; ./script.sh 

bạn nói rằng một vỏ đăng nhập chạy dưới dùng oracle nên được bắt đầu. Điều đó xảy ra, và các lệnh khác được thực hiện sau khi bạn rời khỏi vỏ này.

Đây có thể không phải là điều bạn muốn.

Tôi thấy tùy chọn sau đây:

sudo -u oracle sh -c 'cd /lo2/ram/daska; ./script.sh' 

mà về nguyên tắc được đề cập trong trang man sudo của.

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