本文目录导读:

Bash 脚本(Linux/macOS)
#!/bin/bash # 获取当前进程的环境变量 echo "所有环境变量:" env # 获取特定环境变量 echo "PATH: $PATH" echo "HOME: $HOME" # 获取指定进程的环境变量(需要进程PID) PID=12345 cat /proc/$PID/environ 2>/dev/null | tr '\0' '\n' # 或者使用 tr 命令 cat /proc/$PID/environ | tr '\0' '\n' | grep -E "^(PATH|HOME)="
Python 脚本
import os
import subprocess
import sys
# 获取所有环境变量
print("所有环境变量:")
for key, value in os.environ.items():
print(f"{key}={value}")
# 获取特定环境变量
path = os.environ.get('PATH', 'Not Set')
print(f"PATH: {path}")
# 获取指定进程的环境变量
def get_process_env(pid):
try:
# Linux 系统
with open(f'/proc/{pid}/environ', 'rb') as f:
data = f.read().decode('utf-8', errors='ignore')
for line in data.split('\0'):
if line: # 跳过空行
print(line)
except FileNotFoundError:
print(f"进程 {pid} 不存在")
except PermissionError:
print(f"没有权限访问进程 {pid}")
# 使用示例
get_process_env(12345)
PowerShell 脚本(Windows)
# 获取当前进程的环境变量
Write-Host "所有环境变量:"
Get-ChildItem Env:
# 获取特定环境变量
Write-Host "PATH: $env:PATH"
Write-Host "USERNAME: $env:USERNAME"
# 获取指定进程的环境变量
function Get-ProcessEnv {
param($ProcessName)
$process = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
if ($process) {
# 使用 WMI 获取进程环境变量
$wmi = Get-WmiObject Win32_Process -Filter "Name='$ProcessName.exe'"
if ($wmi) {
# 解析环境变量
$envVars = $wmi.GetOwner() | Out-Null
# 注意:WMI 不直接暴露环境变量,需要其他方法
}
}
}
# 替代方法:使用 Start-Process 启动进程并捕获环境
$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = "cmd.exe"
$processInfo.Arguments = "/c set"
$processInfo.UseShellExecute = $false
$processInfo.RedirectStandardOutput = $true
$process = [System.Diagnostics.Process]::Start($processInfo)
$output = $process.StandardOutput.ReadToEnd()
$process.WaitForExit()
Write-Host $output
Perl 脚本
#!/usr/bin/perl
use strict;
use warnings;
# 获取所有环境变量
print "所有环境变量:\n";
foreach my $key (sort keys %ENV) {
print "$key=$ENV{$key}\n";
}
# 获取特定环境变量
print "\n特定变量:\n";
print "PATH: $ENV{PATH}\n" if exists $ENV{PATH};
print "HOME: $ENV{HOME}\n" if exists $ENV{HOME};
Node.js 脚本
#!/usr/bin/env node
// 获取所有环境变量
console.log("所有环境变量:");
console.log(process.env);
// 获取特定环境变量
console.log(`PATH: ${process.env.PATH}`);
console.log(`HOME: ${process.env.HOME}`);
// 获取指定进程的环境变量(需要特殊处理)
const fs = require('fs');
const pid = process.argv[2] || process.pid;
try {
// Linux 系统
const data = fs.readFileSync(`/proc/${pid}/environ`, 'utf-8');
const envVars = data.split('\0').filter(Boolean);
console.log(`\n进程 ${pid} 的环境变量:`);
envVars.forEach(env => console.log(env));
} catch (err) {
console.error(`无法读取进程 ${pid} 的环境变量: ${err.message}`);
}
注意事项
- 权限问题:Linux 下读取其他进程的环境变量需要 root 权限或与目标进程相同用户
- 跨平台差异:Windows 和 Linux 获取其他进程环境变量的方法不同
- 进程生命周期:获取的环境变量是进程启动时的快照,后续修改不会反映
- 安全性:环境变量可能包含敏感信息,注意保护
选择哪个脚本取决于你的操作系统和具体需求,Bash 在 Linux 下最直接,Python 和 PowerShell 跨平台性更好。