所以维基百科(链接)告诉我该命令pwd是“打印工作目录”的缩写,这是有道理的。
但是对于环境变量,“P”必须是打印以外的其他内容的首字母缩写词。
我听到人们谈论“当前工作目录”,这听起来更好,更直观,但环境变量似乎仍然被称为 $PWD,而不是 $CWD。从来没有人说“你检查了打印工作目录变量了吗?”。
我目前正在使用 web 应用程序服务器 uWSGI,运行时它告诉我(在 uWSGI 统计页面上):
"cwd":"/home/velle/greendrinks",
Run Code Online (Sandbox Code Playgroud)
所以他们显然喜欢(更直观的首字母缩写词)cwdover pwd。
我想我想弄清楚是我误解了什么,还是只是给环境变量一个不直观的名字?
例如,我有一个用户user1对其 进行了修改.bash_profile,其中一个更改了PATH,例如:export PATH=/some/place:$PATH。如果我user1以su - user1.
但是,如果我尝试通过suas运行命令root,例如:
su -c test.sh oracle
Run Code Online (Sandbox Code Playgroud)
(测试包含echo $PATH)
它似乎没有修改PATH(或 root 的PATH,就此而言)。我也试过复制.bash_profile到.profile,无济于事。
为什么会这样?
http_proxy和都遇到过HTTP_PROXY。两种形式是等价的吗?它们中的一个是否优先于另一个?
我主要在 mac 上工作,ssh/tmux 连接到 Linux 机器来完成我的工作。我在 Linux 机器上运行了 ssh-agent。我有
set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"
在我的.tmux.conf. 但是,每当我重新连接到此会话时,我都必须运行
tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)
为了$SSH_AUTH_SOCK正确设置新的 tmux 窗口。我宁愿不必这样做。有任何想法吗?
我想我没有很好地解释这一点。这是我在远程机器上打开 shell 的 shell 函数:
sshh () {
tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}
Run Code Online (Sandbox Code Playgroud)
当TMUX运行此ssh命令,$SSH_AUTH_SOCK是没有设置,即使是在我的本地环境设置。如果我使用setenv上面的命令将其放入 tmux 的环境中,则一切正常。我的问题是,为什么我必须运行 setenv 命令?
更多信息:
当我附加到现有会话时,$SSH_AUTH_SOCK未在 tmux 环境(或全局环境)中设置。
% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)
如果我手动设置它,事情会起作用:
% …Run Code Online (Sandbox Code Playgroud) 另外,这些变量是否总是与当前登录的用户名匹配(它们在我的 Debian 系统上匹配)?我可以假设它们在其他 Unix(-like) 系统中可用吗?
我也很好奇为什么人们会使用whoami而不是仅仅读取这些变量中的任何一个。
我知道这VARIABLE=value会创建一个环境变量,并export VARIABLE=value使其可用于当前 shell 创建的进程。env显示当前的环境变量,但它们住在哪里?什么包含环境变量(或environment,就此而言)?
在 Ubuntu 12.04 上,当我sudo -s的 $HOME 变量没有改变时,如果我的普通用户是regularuser,情况是这样的:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Run Code Online (Sandbox Code Playgroud)
我很久以前就放弃了 Ubuntu,所以我不能确定,但我认为这是默认行为。所以,我的问题是:
一季度。这是怎么做的?配置在哪里?
Q2。如何禁用它?
编辑: 感谢您的回答,这使事情澄清了一点,但我想我必须添加几个问题,以获得我正在寻找的答案。
Q3。在 Debian 中sudo -s,将 $HOME 变量更改为/root. 从我从答案中得到的信息和man sudoshell 运行的sudo -s是 中给出的那个/etc/passwd,对吗?
第 4 季度。但是,在 Ubuntu 和 Debian 上,/etc/passwd为 root提供的 shell都是/bin/bash. 在任一系统中,就 $HOME 而言,我找不到.profile或.bashrc文件的差异在哪里,因此行为sudo -s不同。这有什么帮助吗?
我基本上需要这样做:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
Run Code Online (Sandbox Code Playgroud)
这不起作用。如何将环境变量 $DUMMY 传递给 su?-p 不适用于 -l。
我刚遇到一个问题,显示我不清楚 shell 变量的范围。
我试图使用bundle install,这是一个 Ruby 命令,它使用 的值$GEM_HOME来完成其工作。我已经设置了$GEM_HOME,但是在我使用之前,该命令忽略了该值export,如export GEM_HOME=/some/path.
我读到这使变量以某种方式“全局”(也称为环境变量),但我不明白这意味着什么。我了解编程中的全局变量,但不了解不同的程序。
此外,鉴于我设置的此类变量仅适用于当前的 shell 会话,我将如何为守护进程设置它们?
shell 变量可以有哪些作用域?
我知道以前可能有人问过这个问题,但我在 Google 上找不到。
给定的
会~ == $HOME是真的吗?