我试图让bash将参数传递给另一个bash,我试图通过寻找其中之一并从另一个中调用它来实现这一点,这样他们就可以在同一个外壳下做父母和孩子了。问题是子程序是一个循环,因为它在跟踪事件(可能是读取fifo(pipefile)),这阻止了bash.好的,我想让我们试着在后台运行bash,我想问题是变量不会出现,因为我想它不是在我尝试过的相同的壳下,我试着把它找回来,但是没有可能的结果。
而且在测试的某个时候,当我发送到fifo(管道文件)时,我的shell开始变得疯狂,即使没有任何东西(据我所知正在读),它的行为就好像有东西读过fifo,而我的其他bash屏幕开始做一些疯狂的事情.:O
不管怎么说,我想知道是否有人能帮我。不知道我想做什么是否可能.谢谢。
DOnt知道我在哪里读到的(至今仍能找到这一页):将脚本移动到后台使其可被父母和孩子、子进程及其爸爸妈妈访问,但到目前为止,这还不是我的经验。
bash1
#!/bin/bash
while true
do
. ./bash2.sh &
if [[ $VARIABLE = 1 ]]; then
echo "message recevied"
fibash2
#!/bin/bash
while true
do
if [[ $(cat ./fifo1) = 0 ]]; then
VARIABLE=1
fi
done谢谢
发布于 2014-04-22 03:18:55
因为&总是启动一个新进程,所以在
. ./bash2.sh &和
# Assuming bash2.sh is executable
./bash2.sh &bash2.sh定义的任何变量都局限于执行它的进程;它们对bash1.sh不可用。你的选择是
. ./bash2.sh,等待它完成./bash2.sh写入bash1.sh可以读取的东西(文件、命名管道等)。发布于 2014-04-22 03:48:49
好的,您已经接近了,但是在提供的示例中有一些错误。首先,在这两个脚本中都不需要While循环,因为它在您提供的代码示例中没有用途,所以我从示例中省略了它们。
示例1
#!/bin/bash
external_function(){
echo "This is printed from the sourced script";
[ -e ./fifo1 ] && return $TRUE || return $FALSE
}示例2
#!/bin/bash
source ./test.sh
external_function && echo "the file exists" || echo "The file doesn't exist"
exit您要做的是使用. (source or dot operator),它将读取和执行当前shell上下文中文件名参数中的命令。
语法
. filename [arguments]
source filename [arguments]当使用在现有shell中运行的源运行脚本时,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本以文件名的形式运行,那么将生成一个单独的子subshell (包含一组完全独立的变量)来运行脚本。
这意味着您要执行,而不是,希望使用&将第二个脚本发送到一个新进程,因为它将永远不会返回到主脚本。
另外,我通常会将我希望在第二个(源)脚本中运行的代码放在一个函数中。我认为它使阅读变得更容易,您可以使用它来检查函数中的返回代码,这使得调试更加容易。
最后,if [[ $(cat ./fifo1) = 0 ]]只是检查是否存在,因为您正在检查cat命令的退出状态。您可以简单地使用下面的一行:
[ -e / ] && return $TRUE || return $FALSE-e是一个bash 文件测试操作符,用于检查FILE的存在。
&&是一个bash 运算符,如果最后一个命令返回一个成功的退出代码(不是零),它将运行以下命令
||是一个bash 运算符,如果最后一个命令返回失败的退出代码(0),它将运行以下命令
再读
我将这个参考文献用于bash,我认为值得一提的是
https://stackoverflow.com/questions/23208775
复制相似问题