我正在使用两个版本的ROS,彼此相邻。要使用它,我必须为特定版本提供一些环境变量。我想创建一个脚本来实现这一点。但是如果我创建一个如下的脚本,变量没有设置,它们可能是在子shell中设置的。如何将文件源文件发送到主终端外壳?
source.sh:
source /opt/ros/fuerte/setup.bash;
source ~/fuerte_workspace/setup.bash;
以下是我如何调用source。上海:
./source.sh
# This does not echo anything, but I expect it should
echo $ros_config
更新:通过采购来源。正如答案中所建议的那样,我现在可以看到正在设置的变量。
source ./source.sh
# This works now
echo $ros_config
使用点表示法在当前shell中的脚本文件中进行源,即不创建子shell:
. /opt/ros/fuerte/setup.bash
. ~/fuerte_workspace/setup.bash
使用../(点间距点斜杠)
使用"点空间点斜杠"
执行外壳脚本时,如下所示,它将在当前shell中执行脚本,而不会分叉子shell。
$ . ./setup.bash
换句话说,这将执行设置中指定的命令。在当前shell中bash,并为您准备环境。
问题内容: 如何确定脚本本身内部的Bash脚本文件的名称? 就像我的脚本在文件中一样,那么我如何在不进行硬编码的情况下显示“您正在运行runme.sh”消息呢? 问题答案: 要通读通常不是您想要的符号链接1(您通常不希望这样使用户感到困惑),请尝试: 海事组织,这将产生令人困惑的输出。“我运行了foo.sh,但这是说我正在运行bar.sh !?一定是bug!” 此外,具有不同名称的符号链接的目的之
问题内容: 我正在尝试制作应该像这样使用的shell脚本: 然后,脚本将ocr将图像文件转换为文本文件。到目前为止,这是我想出的: 但是我不知道如何获得和价值观。关于如何做的任何想法? 问题答案: 您提供给bashscript的参数将出现在变量中,并且数字代表该参数。是命令本身。 参数由空格分隔,因此,如果在命令中提供和,它们也将以这些变量结尾,因此: 你会得到: 省略和可能更容易,例如: 然后您
问题内容: 我是bash的新手,但我一直想尝试取消以下命令: 如果我已连接到互联网,则此条件返回true。我希望它以相反的方式发生,但是放在任何地方似乎都行不通。 问题答案: 您可以选择: 分别反转以下表达式的返回值。
我想测试传递给Linux外壳脚本的参数数量,如果参数数量不是或,它应该打印一些东西,不幸的是它不起作用,有人能解释一下我做错了什么吗?
问题内容: 我正在尝试使用命令记录bash会话。 该命令是从bash脚本开始执行的,但是一旦执行,bash脚本就会终止。 我尝试使用各种组合来始终以相同的结果调用命令(调用该命令后立即终止bash脚本)。我得到的输出如下: 我也尝试过最后用a来调用命令,但是再次失败了。 谁能告诉我如何从bash脚本调用命令? 谢谢 问题答案: 您的Shell脚本没有终止。它仍在运行。您会收到提示,因为正在生成新的
问题内容: 在系统调用中,如果使用打开,系统调用将确保仅在文件不存在时才创建该文件。系统调用保证原子性。有没有类似的方法可以通过bash脚本以原子方式创建文件? 更新:我发现了两种不同的原子方式 使用set -o noclobber。然后,您可以原子地使用>运算符。 只需使用mkdir。Mkdir是原子的 问题答案: 100%纯bash解决方案: 如果不存在名为的文件,则此命令将创建一个名为的文件