extractCommandName 提取命令名
(cmd string)
| 756 | |
| 757 | // extractCommandName 提取命令名 |
| 758 | func (ls *LocalSandbox) extractCommandName(cmd string) string { |
| 759 | // 移除前导空格和管道前的部分 |
| 760 | cmd = strings.TrimSpace(cmd) |
| 761 | |
| 762 | // 处理环境变量前缀 (如 VAR=value cmd) |
| 763 | for strings.Contains(cmd, "=") { |
| 764 | parts := strings.SplitN(cmd, " ", 2) |
| 765 | if len(parts) < 2 { |
| 766 | break |
| 767 | } |
| 768 | if strings.Contains(parts[0], "=") { |
| 769 | cmd = strings.TrimSpace(parts[1]) |
| 770 | } else { |
| 771 | break |
| 772 | } |
| 773 | } |
| 774 | |
| 775 | // 提取第一个词 |
| 776 | fields := strings.Fields(cmd) |
| 777 | if len(fields) == 0 { |
| 778 | return "" |
| 779 | } |
| 780 | |
| 781 | cmdName := fields[0] |
| 782 | |
| 783 | // 移除路径前缀 |
| 784 | cmdName = filepath.Base(cmdName) |
| 785 | |
| 786 | return cmdName |
| 787 | } |
| 788 | |
| 789 | // recordAudit 记录审计日志 |
| 790 | func (ls *LocalSandbox) recordAudit(cmd string, opts *ExecOptions, result *ExecResult, startTime time.Time, blocked bool, blockReason string) { |