/ usr / bin / env -0(对于非Linux系统)

低音

考虑到我想以编程方式阅读交互式shell的环境。现在,启动外壳程序,运行/usr/bin/env并捕获其输出似乎是一个不错的解决方案。但是直到直到我们意识到变量值可以有换行符为止:

$ export LINE0='VALUE0
> LINE1=VALUE1'
$ env | grep ^LINE
LINE0=VALUE0
LINE1=VALUE1

因此,捕获env -0(-NULL分隔的条目)的输出似乎是一种更好的方法,但这仅适用于GNU env,因此大多数情况是特定于Linux的。

是否有任何便携式(POSIX或BSD)的方式来获取NULL环境变量-分隔列表,只使用标准的命令行工具(可以使用awk,但没有perl/ python/ruby允许的)?

满天星

我不知道您打算如何恢复捕获的环境,因为除了zsh之外,没有外壳程序在其变量中支持nul字节。

无论如何,您都可以使用awk转义\as\\和换行符\n,而仍然使用换行符来分隔name=val条目:

awk 'BEGIN{
  for(e in ENVIRON){
    v = e "=" ENVIRON[e];
    gsub(/\\/, "&&", v); gsub(/\n/,"\\n",v); print v
  }
}'
fzd$ env - $'foo\\bar\nquux=foo\\bar\nquux' lol=cat printenv
lol=cat
foo\bar
quux=foo\bar
quux

fzd$ env - $'foo\\bar\nquux=foo\\bar\nquux' lol=cat awk 'BEGIN{
  for(e in ENVIRON){
    v = e "=" ENVIRON[e];
    gsub(/\\/, "&&", v); gsub(/\n/,"\\n",v); print v
  }
}'
foo\\bar\nquux=foo\\bar\nquux
lol=cat

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对于'/ usr / bin / env python'默认为python3

symlink / usr / bin / env损坏?

从/ usr / bin / env或/ bin启动bash

在Windows上使`#!/ usr / bin / env python`工作

是否可以保证/ usr / bin / env存在?

/usr/bin/env: “node”: 权限被拒绝

$BASH_VERSION vs /usr/bin/env

#!_ perl与#!/ usr / bin / env perl相同吗?

$BASH_VERSION 与 /usr/bin/env

在Linux上/ usr / bin与/ usr / local / bin

为什么#!/ usr / bin / env bash在我的系统上不起作用?

如何避免在系统日志中将/ usr / bin / env标记为可执行文件

为什么#!/ usr / bin / env bash优于#!/ bin / bash?

在Linux上使用`#!/ usr / bin / env命令--argument`的Shebang行失败

在Linux上的/ usr / bin / env中设置环境变量会挂起进程

“#!/ usr / bin / env bash”和“#!/ usr / bin / bash”之间有什么区别?

为什么“#!/ usr / bin / env python”比“#!/ usr / bin / python”更正确?

/ usr / bin / env和Capistrano 3在Rails部署中失败

在Windows上使用#!/ usr / bin / env python3 shebang

Python / usr / bin / env:错误的解释器:不是目录

出现错误/ usr / bin / env:node:权限被拒绝

/ usr / bin / env如何知道要使用哪个程序?

在Java中执行/ usr / bin / env bash -c“ command”

为什么#!/ usr / bin / env将“ $ @”显示为1?

在配置脚本中使用硬编码的/ usr / bin / env

什么是#!/ usr / bin / env xdg-open在桌面文件中?

/ usr / bin / env:'python':没有这样的文件或目录

PATH 在 /usr/bin/env -i /bin/bash --norc --noprofile 之后不为空

POSIX shell脚本shebang#!/ bin / sh与#!/ usr / bin / env sh,有什么区别?