Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在shell/bash脚本中使用文件之间的变量_Bash_Shell - Fatal编程技术网

在shell/bash脚本中使用文件之间的变量

在shell/bash脚本中使用文件之间的变量,bash,shell,Bash,Shell,这个问题已经贴在这里很多次了,但它似乎从来没有回答过我的问题 我有两个脚本。第一个脚本包含一个或多个变量,第二个脚本需要这些变量。第二个脚本还需要能够更改第一个脚本中的变量 我对寻源(包含变量的第一个脚本运行第二个脚本)或导出(使用环境变量)不感兴趣。我只是想确保第二个脚本可以读取和更改(获取和设置)第一个脚本中可用的变量 (注:如果我误解了采购或导出的工作原理,并且它适用于我的场景,请让我知道。我对这些方法并不完全熟悉,在我读过之后,我只是不认为这些事情会达到我想要的效果)环境变量是每个流程的

这个问题已经贴在这里很多次了,但它似乎从来没有回答过我的问题

我有两个脚本。第一个脚本包含一个或多个变量,第二个脚本需要这些变量。第二个脚本还需要能够更改第一个脚本中的变量

我对寻源(包含变量的第一个脚本运行第二个脚本)或导出(使用环境变量)不感兴趣。我只是想确保第二个脚本可以读取和更改(获取和设置)第一个脚本中可用的变量


(注:如果我误解了采购或导出的工作原理,并且它适用于我的场景,请让我知道。我对这些方法并不完全熟悉,在我读过之后,我只是不认为这些事情会达到我想要的效果)

环境变量是每个流程的。一个进程不能修改另一个进程中的变量。你所要求的是不可能的


脚本的常用解决方法是寻源,它通过在同一个shell进程中运行两个脚本来工作,但您说您不想这样做。

因此,在web上进行了长时间搜索并进行了大量尝试后,我终于找到了某种解决方案。事实上,这很简单

不过,有一些先决条件

  • 您想要设置的变量必须存在于您试图设置它的文件中(我猜当它还不存在时也可以创建变量,但这不是我在这里要讨论的)
  • 您试图在其中设置变量的文件必须存在(显然,我再次猜测这也可以做到,但再次强调,这不是我想要的)

  • sudo sed-i的/^\(VARNAME=\)./\1VALUE/'FILENAME

    因此,即在文件中将名为
    Var1
    的变量设置为
    5
    test.ini

    sudo sed-i的/^\(Var1=\)./\15/'test.ini


    阅读
    sudo grep-Po'(?我也考虑过这一点。我将使用文件作为变量。例如,在脚本1中,您用于将变量值写入文件:

    echo $varnum1 > /home/username/scriptdir/vars/varnum1
    echo $varnum2 > /home/username/scriptdir/vars/varnum2
    
    在脚本2中,用于将文件中的值读回变量:

    $varnum1=$(cat /home/username/scriptdir/vars/varnum1)
    $varnum2=$(cat /home/username/scriptdir/vars/varnum2)
    
    两个脚本都可以在任何给定时间读取或写入变量。理论上,两个脚本可以尝试同时访问同一个文件,我不确定会发生什么,但由于每个文件只包含一个值,读取或写入的时间应该非常短。 为了减少这些时间,您可以使用ramdisk

    我认为这比脚本互相编辑要好得多(yuk!)。脚本的实时编辑可能会弄乱脚本,只有在编辑完成后再次启动脚本时才有效


    祝你好运!

    Hmm,这太不幸了。有办法解决吗?对于脚本来说,有来源。除此之外,环境变量没有好的解决办法。选择另一种IPC机制,就像另一个人说的,你排除了在shell脚本之间进行通信的唯一方法。这很好;如果你想规则的话如果你想做你所描述的事情,你只能通过环境变量进行交流(将信息传递到另一个脚本中,而不作为命令行参数提供)。如果被调用的脚本必须修改调用脚本环境,则除了点画(或“寻源”)之外,您没有其他重要的选择另一个脚本。你可以考虑第一个脚本执行器第二个,然后第二个脚本Excel A第三或一个新的交互式shell——新的shell将从第一个继承环境,第二个被修改。但是这不太可能完全令人满意。你也可以考虑使用INI文件来存储数据。寻源模型很可能是第二个(使用变量)脚本寻源第一个(定义变量)脚本。因为第一个脚本本质上是第二个脚本的“配置”文件。@Lambic这是怎么工作的?我从来没有听说过在shell脚本中使用ini文件。
    echo $varnum1 > /home/username/scriptdir/vars/varnum1
    echo $varnum2 > /home/username/scriptdir/vars/varnum2
    
    $varnum1=$(cat /home/username/scriptdir/vars/varnum1)
    $varnum2=$(cat /home/username/scriptdir/vars/varnum2)