2015-05-13 176 views

回答

3

執行sudo後有一個新的shell,其餘的「commands」不是它的一部分,而是父shell的一部分。你可以這樣做:

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

或直接

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

後者取決於腳本是否需要這個特定的工作目錄或不... – glglgl

+0

是的,這是一個有效的點。 –

4

使用& &分離

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

只是在使用'&&'時,如果鏈中的任何命令失敗,其餘的將不會執行 – frost

+0

不行,這是行不通的我用分號和&&符號試過,它只執行第一個命令..請再次檢查 –

+1

如果所有命令都成功,則用'&&替換';'沒有區別。無論如何,這不是問題,也不解決問題。 –

3

您還可以使用分號來單獨您的命令

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

使用& &和分號之間的區別是,如果你只有在前一個成功後纔想執行每個命令那麼你可以使用& &運算符。但是,如果要執行命令,則不管以前是否執行命令,都可以使用分號(;)分隔命令。

+0

不,這是行不通的我用分號和&&符號試過,它只執行第一個命令..請再次檢查 –

+0

@Ramdas: - 你看到了glglgl給出的答案'sudo -u oracle sh -c'cd/L02/RAM/daska; 。/ script.sh'' –

+0

是的,但oracle配置文件沒有得到那裏,當我使用上述命令與-i ..我收到錯誤失敗sqlplus命令未找到,當我手動執行命令其工作正常 –

3

我只是將Piperoman's和Rahul的答案加到&&後面的命令只有在第一個成功執行後才執行,並且總是執行下面的命令:;

所以

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

如果你不在乎是否一切鏈執行,並

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

如果你這樣做。

3

如果你

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

你告訴用戶下運行oracle登錄shell應啓動。發生這種情況,其他命令在離開此shell後執行。

這可能不是你想要的。

我看到下面的選項:

sudo -u oracle sh -c 'cd /lo2/ram/daska; ./script.sh' 
這在原則上須藤的手冊頁提到