【问题标题】:How to access shell variable of one context on other shell's context如何在另一个 shell 的上下文中访问一个上下文的 shell 变量
【发布时间】:2015-07-03 02:19:12
【问题描述】:

我在 shell 上执行了以下命令

sw0:root> pwd
/root
sw0:root> echo $(history 1)
2 echo $(history 1)
sw0:root>

现在我在一个c文件中调用系统系统调用,如下所示

system (" echo \"___history1 = $(history 1)____\"");

输出:

___history1 = ____

我尝试的是使用system 系统调用从 C 中读取 shell 的最后一个历史命令。

请澄清以下疑问

  1. 为什么我无法从 c 文件中读取在 shell 中执行的最后一个历史命令?

  2. 是不是因为当我调用系统调用时,它分叉了一个新的shell?

  3. 如果是这样,我该如何实现?从其他 shell 读取 1 个 shell 的命令输出?

【问题讨论】:

    标签: c linux bash shell


    【解决方案1】:

    当你运行你的程序时,它在一个子shell中运行并且不会继承调用shell的历史。

    您可以将此与运行bash -c history 进行比较,您不会得到任何结果。

    【讨论】:

    • Gauthier,我有没有办法做到这一点?
    【解决方案2】:

    您现在打开 shell:1 执行一些命令。 现在关闭那个外壳。

    之后打开新的 shell2 并使用 system() 命令,它将获得在 shell1 中执行的命令的信息


    在关闭当前 shell 之前,它的历史不会刷新到全局历史文件中。

    是的,系统会打开自己的上下文。


    OP:我在启动时运行的主 shell 上执行了这个命令 系统,有什么办法可以手动刷新吗?

    为此,您需要在 .bashrc 文件中添加这一行

    export PROMPT_COMMAND='history -a'
    

    见:http://www.aloop.org/2012/01/19/flush-commands-to-bash-history-immediately/

    【讨论】:

    • 先生,我在系统启动时运行的主 shell 上执行了这个命令,有什么办法可以手动刷新它吗?
    • @user3446120 更新了我的答案
    • 32 先生,我的 PROMPT_COMMAND 已经指向某个脚本,无法更改。无论如何我可以从这个 shell 切换到那个 shell 吗?
    • export PROMPT_COMMAND=$PROMPT_COMMAND:'history -a' 这样您就可以在该变量中添加更多价值...
    • 32 先生,我也试过了,它不刷新,有什么办法可以从一个 shell 上下文切换到另一个?
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2011-04-16
    • 2012-02-08
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多