我正在尝试运行使用$HOME和$USER环境变量的服务。我可以将它们设置为服务本身,但这只是一个临时解决方案。
假设我有一个test.sh包含以下内容的脚本:
echo $USER
Run Code Online (Sandbox Code Playgroud)
我运行它start-stop-daemon以查看我的结果:
$ start-stop-daemon --start --exec `pwd`/test.sh --user guest --group guest --chuid -guest
root
Run Code Online (Sandbox Code Playgroud)
好像它没有更新环境,也许应该报告为错误?
我发现了一个讨厌的hacky解决方案,它只在我这个简单的用例中有效(原因不明):
$ start-stop-daemon --exec /usr/bin/sudo --start -- -u guest -i 'echo $USER'
guest
Run Code Online (Sandbox Code Playgroud)
我敢肯定其他人偶然发现了这一点,我对干净的解决方案感兴趣。
$ start-stop-daemon --version
start-stop-daemon 1.13.11+gentoo
Run Code Online (Sandbox Code Playgroud) 我在那里创建了文件 ~/.ssh/environment :
LEVEL=0
Run Code Online (Sandbox Code Playgroud)
当我通过 ssh 运行脚本以获取环境变量级别时,它会像它应该的那样返回 0。
在authorized_keys 文件中,我有几个键,并试图更改其中几个键的值,因此当我在另一端运行脚本时,它可以修改它处理信息的方式。我在普通键之前添加以下内容:
command="/path/to/script" environment="LEVEL=1"
Run Code Online (Sandbox Code Playgroud)
如果我没有环境段,则脚本执行得很好,但是如果我设置了环境部分,则脚本将无法运行。
我不确定我做错了什么。我什至正确地接近这个吗?
基本上我有 4 个不同的键,在某些情况下,我希望人们拥有 1 级或 2 级,默认值为 0,但我想设置谁拥有该级别,并且仅在他们登录执行他们的命令时才设置它。
我想我几乎不明白它应该如何工作,所以我对它应该如何工作的理解可能完全错误。
有任何想法吗?
我试图添加$PATH为所有用户,包括网络服务器的用户(即,WWW的数据)用不同的方法,例如编辑/etc/profile,/etc/environment等。在所有的情况下,它工作在终端,但不与内壳PHP命令。
例如echo $PATH在终端中显示可用路径,包括我添加的路径;但是,shell_exec('echo $PATH')在 PHP 中显示了没有我添加的路径的原始路径:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如何全局设置 $PATH 以供网络服务器用户使用?我在 Ubuntu/Debian 上使用 nginx。
我尝试编辑/etc/init.d/nginx,我认为这是nginx的起点,但没有效果。
我希望将目录永久添加到%PATH%大量 Windows 机器上可用的环境中。有什么方法可以从命令行 ( cmd)执行此操作,以便我可以编写解决方案的脚本,而不必在数十台服务器上使用 GUI。
我怎样才能做到这一点?
windows command-line-interface environment-variables windows-command-prompt path
我正在尝试使用 SetEnvIf(Apache2,通过 .htaccess 文件)来存储环境变量,其中分配给变量的值需要包含空格。例如,尝试将环境变量“AUTH_KEY”设置为具有值“a b”:
SetEnvIf Request_URI "^/example" AUTH_KEY="a\ b"
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都无法转义值中的空格 - 空格充当要创建的 env vars 之间的分隔符(在上面的 AUTH_KEY 是用值 '"a\' 和第二个 env var 创建的创建名为 'b"')。我也尝试过单引号但没有运气。
如何转义空格字符?
为了满足PubSubHubbub 0.4 规范的要求,我必须rel=self为每个文件发送一个标头。
我现在正在尝试使用Apachemod_headers和环境变量来做到这一点:
Header append Link '<http://example.org%{REQUEST_URI}e>; rel="self"'
Run Code Online (Sandbox Code Playgroud)
只要文件由 PHP 处理,这就会起作用,但不适用于*.htm未由mod_php或任何 CGI 进程处理的静态文件(如)。
似乎没有办法获取所有当前 Apache 环境变量的列表,因此我无法检查哪些实际上可用。
所以我的问题是:如何访问Header append指令中当前请求的 URL 的相对路径?
发生在带有 Apache 的 Debian 7 上2.2.22-13+deb7u4。
如果您使用 ElasticBeanstalk 设置 RDS,您如何进入框(通过 eb ssh)并查看将 RDS 应用于您的 EB 实例时设置的环境变量?
Amazon 会自动设置这些环境变量。
RDS_DB_NAMERDS_USERNAMERDS_PASSWORDRDS_HOSTNAMERDS_PORT似乎只能在运行应用程序的进程中查看。
我想以某种方式通过终端查看这些,eb printenv命令不显示它们。
我在/etc/profile. 在一般用户的情况下我没有任何问题,但是当我成为sudo.
你会怎么做重写PATH这是由设置/etc/profile,即使我成为root权限sudo?
我有一个脚本可以做一些内务处理,当从交互式 shell 调用时它运行良好,但在被 cron 调用时什么也没做。为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的 shell:
env -i /bin/bash --noprofile --norc
Run Code Online (Sandbox Code Playgroud)
使用这个空白环境,我已经深入到我的脚本中,发现以下内容grep与任何文件都不匹配:
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
Run Code Online (Sandbox Code Playgroud)
但是,当从交互式 shell 运行时,该命令将返回匹配文件的文件名。
请注意,该表达式匹配如下行: WS_STATUS = "remove"
通过反复试验,我发现将-P选项添加到 [Perl regex] 中,命令开始在“空白”shell 中正常工作。但是,我不知道为什么我的登录 shell 似乎默认为grep -P.
grep二进制,/bin/grepgrep=pgrep或定义别名grep="grep -P"GREP_OPTIONS定义环境变量。这里有什么交易?
注:操作系统为 RHEL v5.10,Bash 为 v3.2.25,grep 为 v2.5.1
我在 docker 容器中运行 php7-fpm。但是,我的 php 脚本无法访问我的 docker-compose 文件中设置的环境变量。getenv('MY_ENV_VAR')返回FALSE。
我已更改/etc/php/7.0/fpm/pool.d/www.conf为包含clear_env = no并重新启动,service php7.0-fpm restart但我的环境变量 start 不存在。
我也试过编辑 /etc/php/7.0/fpm/php.ini 包含行variables_order = "EGPCS".
当我在 bash shell 上执行到我的容器时,我可以看到我的变量存在。只是它们在我的 php 脚本中无法访问。
我错过了什么?
linux ×3
apache-2.2 ×2
php-fpm ×2
amazon-ebs ×1
amazon-rds ×1
bash ×1
docker ×1
grep ×1
http-headers ×1
nginx ×1
path ×1
root ×1
ssh ×1
ssh-keys ×1
sudo ×1
ubuntu ×1
users ×1
windows ×1