有没有一种方法来标记要在当前shell从whitin它执行的脚本? 我知道我可以使用:
. ./path/myscript.sh
但我需要一种方法包括脚本里面的“点”的方式。
编辑:这是这样的。 我有一个脚本“myscript.sh”位于目录中的:
rm -r A
mkdir A
touch A/test.file
cd A
当脚本在正常的方式被执行:
sh myscript.sh
在退出脚本我不能列出目录。 当启动脚本在当前shell:
. ./myscript.sh
没有问题。 我需要一种方法,包括我的剧本里这个“点”的方式,以便它可以在没有它被调用。
还有在shell执行脚本的两种方式。 根据您的需求,你会做下列之一(不一举两得!)。
- 启动脚本程序,它有它自己的过程。
- 源的脚本作为一串文本,其中文本由当前壳处理。
要启动脚本的程序:
这将装载机,它具有interperts前两个字符专用逻辑来读#!
作为“启动该程序将于明年和内容传递到它。” 请注意,这只是正常工作的写入接收的节目内容
要执行此脚本,到当前的shell:
- 键入命令
. script.sh
. script.sh
或source script.sh
注: .
在bash相当于source
在bash。
这可以作为你的“script.sh”的内容类型。 例如,如果你在“script.sh”设置一个变量,然后该变量将在当前shell设置。 您需要取消定义的变量从当前shell清除它。
这很大程度上不同于#!/bin/bash
例子,因为在新的设置变量bash
子进程将不会影响你壳推出从子进程。
- 把
#!/bin/sh
作为脚本的第一行 - 添加执行权限,即
chmod +x /path/to/script.sh
然后你就可以运行该脚本
即/path/to/script.sh
或者如果你有/path/to
在PATH
环境变量,你可以简单地执行script.sh
如果你创建一个shell函数,而不是一个脚本,你可以做到这一点。 功能在同一个外壳,而不是一个子shell执行。 如果您在.profile定义功能,它们将提供给登录壳。
我发现了一些更多的细节和解释在这里: http://steve-parker.org/sh/functions.shtml
有一两件事你可以做的是功能添加到您的个人资料.bash。 然后运行该功能将不会运行的脚本。
现在我来试试......
testit() {
rm -r A
mkdir A
touch A/test.file
cd A
}
作品...
所以另一种选择是建立在它的函数定义的文件和源该文件。