怎么用脚本获取进程环境变量

wen 实用脚本 2

本文目录导读:

怎么用脚本获取进程环境变量

  1. Bash 脚本(Linux/macOS)
  2. Python 脚本
  3. PowerShell 脚本(Windows)
  4. Perl 脚本
  5. Node.js 脚本
  6. 注意事项

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}`);
}

注意事项

  1. 权限问题:Linux 下读取其他进程的环境变量需要 root 权限或与目标进程相同用户
  2. 跨平台差异:Windows 和 Linux 获取其他进程环境变量的方法不同
  3. 进程生命周期:获取的环境变量是进程启动时的快照,后续修改不会反映
  4. 安全性:环境变量可能包含敏感信息,注意保护

选择哪个脚本取决于你的操作系统和具体需求,Bash 在 Linux 下最直接,Python 和 PowerShell 跨平台性更好。

抱歉,评论功能暂时关闭!