4

I am stuck in changing the directory in a shell script in linux.

#!/bin/sh
cd /driver

The above does not change the directory. Shell is running in its own context so it can not provide linux terminal with changed drive (into driver)

but if I give cd /driver ls It gives the proper output of ls in driver directory again comes out of driver directory

Can anybody help me to get terminal with actually changed path (into driver).

4

5 回答 5

4

如果你运行你的脚本

./scriptname

您正在打开一个执行脚本命令的子 shell。更改该子 shell 中的目录对调用脚本的 shell 的工作目录没有影响。相反,如果您键入

source ./scriptname

你应该得到想要的结果。

于 2013-08-15T08:01:32.067 回答
2

做“源脚本名称”。它会改变目录

于 2013-08-15T07:58:23.843 回答
1

您的脚本是一个可执行文件:

#!/bin/sh
cd /driver

去除#!/bin/sh

cd /driver
于 2013-08-15T08:05:45.783 回答
1

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

像这样:

文件:驱动,记得设置x权限

#!/bin/bash
cd /driver
bash

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

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

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

于 2013-08-15T08:01:36.053 回答
0

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

创建一个脚本,如 -

read a
echo "You entered : $a"

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

在同一个选项卡中运行“ps”命令并记下 shell pid(比如 p1)。

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

脚本将要求输入但不提供输入。现在在另一个选项卡中运行类似 'ps -ef | grep 点'。在这里你会发现有两个shell进程。您还有一个 shell,其 ppid 等于前一个 shell 的 pid,即 p1。

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

希望这有帮助。

于 2015-02-25T05:42:29.467 回答