更改目录在shell脚本中不起作用

时间:2013-08-15 07:55:49

标签: linux shell

我无法更改linux中shell脚本中的目录。

#!/bin/sh
cd /driver

以上内容不会更改目录。 Shell正在自己的上下文中运行,因此无法为linux终端提供更改的驱动器(进入驱动程序)

但如果我给     cd / driver     LS 它在ls

中再次提供驱动程序目录中driver directory的正确输出

任何人都可以帮助我获得实际更改路径(into driver)的终端。

5 个答案:

答案 0 :(得分:3)

如果您使用

运行脚本

./scriptname

您正在打开执行脚本命令的子shell。更改该子shell中的目录不会影响您从中调用脚本的shell的工作目录。如果您输入

source ./scriptname

你应该得到理想的结果。

答案 1 :(得分:2)

执行“source script_name”。它将更改目录

答案 2 :(得分:1)

在设置目录后,您可以在脚本中启动shell或终端。

如此:

file:driver,记得设置x权限

#!/bin/bash
cd /driver
bash

运行驱动程序将生成另一个shell提示符。

当前目录现在是驱动程序。

键入“exit”或control-D将返回旧shell,其前一个目录。

答案 3 :(得分:1)

您的脚本是可执行文件:

#!/bin/sh
cd /driver

删除#!/bin/sh

cd /driver

答案 4 :(得分:0)

只是为了验证上述问题的根本原因,您可以执行以下操作

创建一个类似 -

的脚本
read a
echo "You entered : $a"

保存(比如script.sh)并根据需要相应地更改权限。

在相同的选项卡中运行'ps'命令并记下shell pid(比如p1)。

现在运行脚本(即./script.sh)

脚本会询问输入但不提供输入。现在在另一个标签中运行像'ps -ef |这样的东西grep pts'。 在这里你会发现有两个shell进程。你还有一个shell,其ppid等于前一个shell的pid,即p1。

所以基本上每个shell脚本调用都会创建一个新进程,从而创建一个新的上下文。

希望这会有所帮助。