当前位置: 首页 > 知识库问答 >
问题:

在Bash中的命令之前设置环境变量对管道中的第二个命令不起作用

景志
2023-03-14

在给定的shell中,通常我会设置一个或多个变量,然后运行一个命令。最近,我了解了将变量定义前置到命令中的概念:

FOO=bar somecommand someargs

这管用...算是吧。当您更改LC_*变量(这似乎会影响命令,但不会影响它的参数,例如'[a-z]'字符范围)或将输出管道传输到另一个命令时,它就不起作用了:

FOO=bar somecommand someargs | somecommand2  # somecommand2 is unaware of FOO

我也可以用“foo=bar”在一些mecommand2前面加上“foo=bar”,这很有效,但是会增加不必要的重复,而且对于根据变量解释的参数(例如,'[a-z]')没有帮助。

我在想一些事情:

FOO=bar (somecommand someargs | somecommand2)  # Doesn't actually work

我得到了很多好答案!目标是保持这是一个一行程序,最好不使用“导出”。使用调用Bash的方法总体上是最好的,尽管括号中带有“export”的版本稍微紧凑一些。使用重定向而不是管道的方法也很有趣。

共有1个答案

柳英豪
2023-03-14
FOO=bar bash -c 'somecommand someargs | somecommand2'
 类似资料:
  • 本文向大家介绍cmd环境变量命令set 设置永久环境变量命令setx,包括了cmd环境变量命令set 设置永久环境变量命令setx的使用技巧和注意事项,需要的朋友参考一下 set命令 set命令用于设置当前cmd窗口中的环境变量,只在当前cmd窗口有效,cmd窗口关闭后将会失效,而其不会影响到系统中保存的用户环境变量。 setx命令 setx设置永久用户环境变量 setx env_name env

  • 问题内容: 我正在编写一个Shell脚本,在其中设置几个变量,其值是命令的输出。 我得到的错误是: 现在,我确实阅读了其他类似的问题,并在此基础上尝试了多种方法: 将命令分为两个调用 尝试使用反引号 尝试使用 但是在每种情况下,命令输出都会执行。如何使其停止执行命令输出并仅将其存储为变量?我需要这个来处理ZSH和BASH。 问题答案: 您可以使用或定义变量。 因此,您必须删除前导符号和周围的任何其

  • 问题内容: 我想在我运行的每个bash命令之后打印日期。 这可以帮助我了解远离键盘时要执行多少命令。 我知道我能做 获取日期,但我不知道在bash上执行的每个命令之后如何甚至是否可以运行此命令。 我也会对在每个命令 之前 运行同一命令感兴趣,因此我可以知道一个命令花费了多长时间。 可能吗? 我应该编辑什么文件? 例如: 如果我也可以介绍以下功能,我将很高兴: 第一个日期是我运行程序的日期,第二个是

  • 我看到了在文件中执行多个命令的以下链接: Docker-compose+命令 使用Docker-Compose,如何执行多个命令 docker-compose为服务运行多个命令 它告诉我们如何在docker-compose文件(也在docker容器中)中执行多个命令。 为了正确运行sburn/apache-atlas映像,必须设置目录中的一些环境变量。 我尝试了以下docker-compose.y

  • 问题内容: 我正在尝试使用bash脚本将JSON文件上传到我的noSQL数据库中,但是它不起作用,我也不明白为什么。 这是脚本: 这是错误: 当我执行命令行中给出的命令时,它仍然可以正常工作。 这是什么错误?谢谢 问题答案: 不要将命令存储在变量中;如果您绝对必须具有可用于日志记录的内容,请将 参数 放入数组中。

  • 我有一个java进程,我试图从bash文件中的环境变量加载多个参数。示例: 有办法解决这个问题吗?这是格式问题吗?这背后的想法是,如果我想使用一些其他/新参数,我不想更改脚本,我只想更改环境变量。 如果我把所有的东西都放在一行中,也许它会起作用,但是这会使实际的命令变得非常长,所以这不是一个最佳解决方案。 同样的事情也适用于一个属性。 我真的很欣赏其他方法。