【问题标题】:Environment variable & Command Line Tool环境变量和命令行工具
【发布时间】:2013-03-16 05:28:39
【问题描述】:

我正在尝试使用名为ccnd 的命令行工具。我想将其日志发送到文件。该工具的文档说:

要开始 ccnd 将输出发送到日志文件而不是终端, 使用您的文件路径设置CCND_LOG 环境变量 想写。任何具有该名称的现有文件都将被覆盖。

这就是我所做的:

$ CCND_LOG='./ccnd.log'
$ ccnd

但我仍然在终端中看到命令行工具的输出。如何让 CCND_LOG 在 ccnd 上生效?

我正在使用bash,这似乎是我的 Mac OS X 终端的默认设置。

【问题讨论】:

  • 你是在使用tcsh 还是bash 作为你的shell?默认情况下,Mac OS X 使用 tcsh,它是 C shell 派生的。
  • @JonathanLeffler 我正在使用bash
  • 使用下面的解决方案,它是否会创建一个日志文件(但仍将输出回显到屏幕上)?祝你好运。
  • @shellter 到目前为止我得到的解决方案对我不起作用。没有创建日志文件。 ccnd 工具仍在我的终端中写入日志。

标签: shell command-line environment-variables


【解决方案1】:

要么:

$ CCND_LOG="./ccnd.log" ccnd

或者:

$ export CCND_LOG="./ccnd.log"
$ ccnd

第一个设置命令的环境;第二个设置环境,直到它被改变。所有的环境变量也是shell变量;并非所有 shell 变量都是环境变量。在导出之前,变量只是一个 shell 变量;一旦导出,它就成为环境的一部分。

如果您使用的是 C shell 衍生工具(例如 tcsh),则必须使用 setenv 命令来创建环境变量;第一个变体不是 C shell 的选项。

% setenv CCND_LOG ./ccnd_log
% ccnd

如果您使用的是 bash,则前两个中的任何一个都应在命令执行期间设置环境。使用导出符号。然后运行env | grep CCND 来检查它是否已设置。

我看到CCNx Documentation 说:

所有 CCNx 程序都要求运行 ccnd:

bin/ccndstart

要开始 ccnd 将输出发送到日志文件而不是终端, 使用您的文件路径设置CCND_LOG 环境变量 想写。任何具有该名称的现有文件都将被覆盖。

查看其他可用环境变量的列表 (包括调试消息控件)运行:

bin/ccnd -h

请注意,您通常不应该直接运行 ccnd,而是使用 ccndstart 脚本。

(已添加重点。)

您是在运行ccnd 还是ccndstart

【讨论】:

  • 不幸的是,没有一个适合我。我正在使用 Mac OS X Shell。我需要 setenv 吗?我认为 CCND_LOG 环境变量已经创建(尽管默认情况下它是空白的)。我可以通过echo $CCND_DEBUG看到它的价值
  • 是的;默认情况下,tcsh 是 Mac 终端中的 shell。然后你需要setenv 符号;查看我的更新。
  • 前两个解决方案对我不起作用。 ccnd 工具仍在将其日志写入我的终端而不是文件中。
  • 查看答案中添加的关于使用ccndstart 而不仅仅是ccnd 的注释。您是否有权在运行程序的目录中写入?
  • Mac OS X 多年前将默认 shell 从 tcsh 更改为 bash
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 2021-07-01
  • 2010-09-24
  • 2010-10-09
相关资源
最近更新 更多