touch /tmp/debug.log
LD_DEBUG=all LD_DEBUG_OUTPUT=/tmp/debug.log ls
完成此操作后,我希望将调试信息写入文件/tmp/debug.log
,但它是空的。
Ubuntu 20.04
touch /tmp/debug.log
LD_DEBUG=all LD_DEBUG_OUTPUT=/tmp/debug.log ls
完成此操作后,我希望将调试信息写入文件/tmp/debug.log
,但它是空的。
Ubuntu 20.04
我正在尝试将鱼history
寻呼机设置为bat -l fish
用于语法突出显示。(即仅为命令设置PAGER
环境变量)。bat -l fish
history
我试过:
# 1:
alias history "PAGER='bat -l fish' history"
# results in "The function “history” calls itself immediately, which would result in an infinite loop"
# 2:
alias history "PAGER='bat -l fish' \history"
# results in the same.
# 3:
alias _old_history history
alias history "PAGER='bat -l fish' _old_history"
# results in (line 1): The call stack limit has been exceeded
我知道abbr
在这种情况下这是可行的,但这会改变我的history
命令,这不是我想要的。
我遇到了一个问题,我的命令单独运行时是有效的,但是当与jq一起使用时,命令export test=test就不起作用了,但如果我只运行export test=test,它是有效的。
所以我有一个名为test.json的文件,内容如下:
{ "test":"test124","url":"google.com"}
所以我使用了这个命令:
jq -r 'to_entries | .[] | "export \(.key)=\(.value)"' test.json | sh
我检查了环境变量,但是什么也没有看到。
我尝试了这个命令:
jq -r 'to_entries | .[] | "\(.key)=\(.value)"' test.json | while IFS='=' read -r key value; do export "$key=$value"; ; done
问题依旧。
但如果我使用这个命令,它是有效的:
export test=$(jq -r .test test.json)
但我想要循环执行。
谢谢帮助。
解决方案: 缺少$(...)
$(jq -r 'to_entries | .[] | "export \(.key)=\(.value)"' test.json)
如果 PATH 环境变量中的两个不同目录都包含具有相同名称的二进制文件(但行为略有不同),是否有关于使用哪一个的规范/保证?
在我的机器(macOS Monterey,Darwin 21.2.0)上,我观察到(通过which <binary name>
)二进制文件是从 PATH 中找到的第一个目录中选择的(从左到右读取其内容)。但这是所有 Linux/UNIX 操作系统的标准行为吗?即是否有一些强制执行的标准(例如 POSIX)?
额外的上下文(对于好奇的人):我正在编写一个项目,该项目有一个脚本,该脚本在项目特定的文件夹中下载标准二进制文件的自定义版本,然后调用另一个必须使用自定义二进制文件而不是常规二进制文件的脚本。在调用第二个脚本之前,我将包含自定义二进制文件的文件夹添加到 PATH 中。鉴于我在发生冲突时如何搜索 PATH 的观察结果,我将 PATH 设置为而PATH=<my-custom-folder>:$PATH
不是PATH=$PATH:<my-custom-folder>
. 但这个项目有多个合作者,我想确保我们都运行相同的二进制文件。如果不同的操作系统以与我不同的方式搜索 PATH,事情就会崩溃。
我是欧洲人
export BOOTSTRAP_TIMEZONE="UTC +2"
我无法检查,Github 现在有问题。如果那不对,我应该改变什么?
注意:这个一般主题似乎在不止一个 SE 站点上被令人作呕地覆盖,但请通读所有细节——我没有发现任何问题涵盖了下面描述的所有标准。
另外:我
zsh
在下面的例子中使用。我希望有一个符合 POSIX 标准的解决方案,但这不是一个硬性要求:一些有用bash
且zsh
足够好的东西。
这是一个有助于阐明问题标题的示例:
假设我有以下两个文件:
% ls -AF
.env printenv*
% cat printenv
echo $LOCAL_MESSAGE_1
echo $LOCAL_MESSAGE_2
% cat .env
LOCAL_MESSAGE_1="hello world"
LOCAL_MESSAGE_2="goodnight moon"
我想执行脚本printenv
并在中查看以下内容stdout
:
hello world
goodnight moon
如果我的环境中不存在这些变量,脚本将打印空行(如预期的那样):
% unset LOCAL_MESSAGE_1
% unset LOCAL_MESSAGE_2
% ./printenv
如果我在执行脚本之前设置变量,它们将可供它使用,但仅适用于该单个进程,而不适用于从同一 shell 启动的任何后续进程:
% LOCAL_MESSAGE_1="hello world" LOCAL_MESSAGE_2="goodnight moon" ./printenv
hello world
goodnight moon
% ./printenv
所以,我的问题是:如何根据以下标准复制上一个示例中的行为?
printenv
在当前 shell 中不加修改地运行——而不是在子 shell 中(感谢RudiC)——并获得所需的输出,同时.env
文件中加载变量,同时unset
它们我可以使用什么单行语法来完成此操作?应该用什么代替下面的问号来满足上面的标准?
% ?????????? ./printenv
hello world
goodnight moon
我一直在使用 pass 来存储密码,但现在我想将我的密码存储从默认位置移动。根据手册页,将PASSWORD_STORE_DIR
变量设置为所需的路径以覆盖默认路径就足够了,但是在我的情况下,这没有效果。将.password-store
文件夹移动到新位置并设置环境变量后,执行命令pass
会导致“错误:密码存储为空。尝试“传递初始化”。”。即使只是重命名.password-store
内部主目录:
$ cd
$ mv .password-store .pass
$ PASSWORD_STORE_DIR=/home/bakhtin/.pass #bakhtin is the user name
$ pass
Error: password store is empty. Try "pass init".
关于问题可能是什么的任何想法?我确保变量名称等没有拼写错误。
我正在使用导出来设置环境变量。
export OPCON_VERBOS=${vb}
以后如何取消设置以使其不再被定义?
我在 Ubuntu 18.04 LTS(仿生海狸)上使用 Bash shell。我想允许用户在 bash 中定义一个环境变量,可以在后续终端实例中使用该变量来设置使用该变量的某些函数的详细程度。
用户必须做些什么来启用和禁用此类功能?重点是让用户无需.bashrc
直接更改即可启用或禁用环境变量功能。这些设置应该只适用于需要这种能力的特定用户。
我一直认为这PS1
是一个环境变量。但是当我检查 Ubuntu 的默认值并.bashrc
检查PS1
grep PS1 /etc/skel/.bashrc
没有export PS1
。
如果没有导出,是否意味着它不是环境变量?