2015-05-13 178 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' 
这在原则上须藤的手册页提到