【问题标题】:Bash export commandBash 导出命令
【发布时间】:2012-04-11 15:20:53
【问题描述】:

我的 64 位 Ubuntu 遇到了一个奇怪的问题 - 在 export 命令上。

基本上,我在 Windows 7 系统上的 Ubuntu 上安装了 VM,我正在尝试使用自定义(由客户端提供)软件将命令从我的 Windows 系统传递到我的 VM 安装。

所以,在我的虚拟机上,当我这样做时:

export foo=bar
echo $foo

一切都按预期进行。

但是,当我通过自定义软件(基本上将 Linux 命令作为字符串传递给 bash shell)执行相同操作时,我得到:

export: command not found

我尝试查看外壳(使用自定义软件),使用:

echo $SHELL > shell.txt

我得到了预期的 /bin/bash,但我仍然得到 “export: command not found error”

我该如何解决这个问题?

【问题讨论】:

  • export 不是真正的命令(即不在 /bin、/usr/bin 等中),它由 bash 内部处理。如果您愿意,可以执行 bash -c "export foo=bar;echo \$foo" ...
  • 你说的这个定制软件是什么?
  • 亚当所说的可能是解决您问题的关键。 export 是内置的 bash。 echo 是一个二进制文件,位于您的 $PATH
  • 什么是“定制(由客户提供)”软件?
  • 谢谢你们的回复。 “自定义软件”是我的客户端编写的一堆 java 代码,它包含运行 linux 命令的功能(基本上将命令作为字符串传递给 shell)。我将尝试使用 bash -c 选项并用结果更新你们。

标签: linux ubuntu


【解决方案1】:

export 是 Bash 内置函数,echo$PATH 中的可执行文件。所以export 被 Bash 原样解释,而不产生新进程。

您需要让 Bash 解释您的命令,您可以使用 -c 选项将其作为字符串传递:

bash -c "export foo=bar; echo \$foo"

还有:

bash -c 的每次调用都从一个全新的环境开始。所以像:

bash -c "export foo=bar"
bash -c "echo \$foo"

不会工作。第二次调用不记得foo

相反,您需要在bash -c 的单个调用中链接以; 分隔的命令:

bash -c "export foo=bar; echo \$foo"

【讨论】:

  • “ALSO”段落帮助我解决了我的问题。谢谢
  • 我执行了$ bash -c "export foo=bar",但上面写着$ bash -c "echo \$foo" foo: Undefined variable.
  • 这不会覆盖我的centos 5.11上的值,这一行的echo仍然打印旧值
  • @DavidDunham 的答案中有两个 sn-ps:第一个在 one bash 调用中调用 export 和 echo,另一个在两个单独的调用中调用。因此,第一个应该“覆盖”变量(尽管只是暂时的,然后打印新值),第二个不应该。你观察到了什么?
【解决方案2】:

如果您不能使用“导出”命令,那么只需使用:

setenv path /dir

这样

setenv ORACLE_HOME /data/u01/apps/oracle/11.2.0.3.0

【讨论】:

    【解决方案3】:

    可能是因为它试图将“导出”作为外部命令执行,而且它是一个内部的 shell。

    【讨论】:

      【解决方案4】:

      如果您使用的是C shell -

      setenv PATH $PATH":/home/tmp"
      

      【讨论】:

        【解决方案5】:

        从 Bash 更改为 sh 脚本使我的脚本工作:

        !/bin/sh
        

        【讨论】:

        • 其实你也是对的。有时默认 shell 既不是 bash 也不是 sh,使用此命令可以解决问题
        【解决方案6】:

        按照这些步骤删除“找不到bash导出命令”。终端打开错误修复>>>>>>

        打开终端并输入:

        nano ~/.bashrc
        

        加载纳米后:

        删除所有 'export PATH = ...' 行并按 Ctrl + O 保存文件并按 Ctrl + E 退出。

        现在终端打开错误将得到修复...

        【讨论】:

        • '导出文件路径中的PATH文件
        【解决方案7】:

        SHELL 是一个环境变量,因此对于您要弄清楚的内容而言,它并不是最可靠的。如果您的工具使用的外壳没有设置它,它将保留其旧值。

        使用ps 找出真正发生的事情。

        【讨论】:

          【解决方案8】:

          您确定该软件(而不是您自己,因为您的测试实际上只显示您的用户默认使用的 shell)使用 /bin/bash

          【讨论】:

            猜你喜欢
            • 2021-01-14
            • 1970-01-01
            • 2020-09-25
            • 2015-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-03
            • 1970-01-01
            相关资源
            最近更新 更多