微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么通过“scriptName”调用脚本不起作用?

我有一个简单的脚本cmakeclean来清洁cmake临时文件

#!/bin/bash -f rm CMakeCache.txt rm *.cmake

我称之为

$ cmakeclean

它确实删除了CMakeCache.txt,但是并没有删除cmake_install.cmake :

rm: *.cmake: No such file or directory

当我运行它像:

通过结构脚本在远程服务器上设置umask

解决MysqL的bash与coloumn名称有“ – ”&从文件查询MysqL

阅读和$ 1的参数有什么区别?

为什么这个bash代码不工作?

如何使用bash从Windows PATH中提取指定的path

$ . cmakeclean

它确实删除了两个。

有什么区别, 我可以使这个脚本工作像一个通常的Linux命令(没有.前面)?

PS我相信这两个时间是相同的脚本执行。 为了检查这个,我在脚本中添加了echo meme ,并以两种方式重新运行。

xargs和发现,rm抱怨文件名中的 n(换行符)

Bash脚本:扩展参数不使用$ @或$ *

DESTDIR和PREFIX的

在dmake中的shell命令添加“/ S”

如何在shell脚本中使用curl?

从#!/bin/bash -f行删除#!/bin/bash -f 。

-f防止路径名扩展,这意味着*.cmake不会匹配任何东西。 当您将脚本作为脚本运行时,它会解释shebang行,实际上会运行/bin/bash -f scriptname 。 当你运行它. scriptname . scriptname ,shebang只是被看作是注释行而被忽略,所以在当前环境中没有-f设置的事实允许它按预期工作。

. script . script是source script缩写,意思是当前 shell执行脚本中的命令。 如果在那里有一个exit ,那么当前 shell会退出(例如终端窗口将关闭)。

这通常用于修改当前shell的环境(设置变量等)。

script要求shell自行分支,然后在子进程中exec给定的脚本,然后等待父进程终止子进程。 如果在脚本中有一个exit ,这将由子shell执行,因此只能终止它。 这个父亲的外壳保持完整,没有被这个调用改变。

这通常用于从当前shell启动其他程序。

这是关于ClearCase的吗? 你在你贫穷的生活中做了什么,你被分配到地狱最深处的工作?

多年来,我是一名高级ClearCase管理员。 十多年来我没有碰到它。 我的生活现在好多了。 天更蓝,鸟儿更悠扬,我每天上班的恐惧现在少了一点。

回到你的问题:很难说出发生了什么事情。 ClearCase做了一些古怪的事情。 在动态的视图中,Unix系统上的ClearCase存储库隐藏在shell的环境中。 现在你看到了,现在你不知道了。

当你运行一个shell脚本时,它启动一个新的环境。 如果某个特定的shell变量没有被导入 ,那么它就是不可见的shell脚本。 当你只是从命令行运行cmakeclean ,你正在产生一个新的shell – 一个不包含你的ClearCase环境的shell。

当你运行一个带有点前缀的shell脚本时. cmakeclean . cmakeclean ,你正在当前shell中运行那个包含你的ClearCase环境的shell脚本。 因此,它可以看到你的ClearCase视图。

如果您使用的是快照视图,您可能会有一个$HOME/.bashrc来改变您的目录。 当一个新的shell环境运行在BASH(MacOS X和Linux的认shell)时,它首先运行$HOME/.bashrc 。 如果这设置了一个特定的目录,那么你最终将进入该目录,而不是运行你的shell脚本的目录。 当我也参与ClearCase地狱的时候,我用这个来看这个。 人们设置了他们的.kshrc脚本(这是BASH和大多数人使用Kornshell之前的日子)来设置他们的视图。 不幸的是,这使得运行任何其他shell脚本几乎不可能做到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐