Git Bash环境下用perl脚本获取uuid值

本文介绍了如何在Windows的gitbash环境中编写一个Perl脚本uuidgen,模拟Linux的uuidgen命令,以便在没有原生支持的情况下获取UUID值。

在Linux环境下,比如在ubuntu就直接有uuidgen命令直接获取uuid值。在Windows环境下常用的git bash中没有对应的命令,略有不便。这里用脚本写一个uuidgen,模拟Linux环境下的uuidgen命令。


#! /usr/bin/perl
use v5.14;
use Win32;

sub uuidGen {
	return Win32::GuidGen() =~ s/[{}]//rg;
}

say uuidGen();


脚本命名为uuidgen,放在 git bash home目录下的bin子目录。然后直接输入uuidgen就能获取了,和ubuntu环境下使用一样方便。

在这里插入图片描述

Step 8/22 : RUN apt-get clean && apt-get update && apt-get install --yes --no-install-recommends --no-install-suggests build-essential npm sudo build-essential net-tools inetutils-ping libncurses5-dev libdigest-crc-perl libpopt-dev xxd liblzo2-dev zlib1g-dev lib32z1 libssl-dev libglib2.0-dev libreadline-dev libjson-c-dev libxml2-dev libsqlite3-dev sqlite3 libuv1-dev libxslt1-dev libfcgi-dev libevent-dev libyajl-dev liburiparser-dev libwebsockets-dev locales lua5.1 liblua5.1-dev python python3 python3-dev python3-pip git git-lfs subversion autoconf automake pkg-config ccache cmake ninja-build clang-tools-6.0 bison flex gettext ca-certificates libtool patch vim unzip uuid-dev wget curl cpio bc gawk gdb valgrind diffstat chrpath texinfo ssh openssh-client openssh-server netbase quilt protobuf-c-compiler dropbear-bin openvswitch-switch tmux dirmngr lighttpd alien mlocate iproute2 dos2unix lsb-release rsync gdisk man pax moreutils npm sudo ---> Running in e931d2dcd184 Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [102 kB] Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [102 kB] Get:4 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [23.8 kB] Get:5 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [1688 kB] Get:6 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [102 kB] Get:7 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB] Get:8 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB] Get:9 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB] Get:10 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB] Get:11 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [1728 kB] Get:12 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [3786 kB] Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2411 kB] Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [30.8 kB] Get:15 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [20.6 kB] Get:16 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [64.0 kB] Get:17 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1637 kB] Get:18 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [3373 kB] Fetched 28.2 MB in 25s (1118 kB/s) Reading package lists... Reading package lists... Building dependency tree... Reading state information... Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: npm : Depends: node-gyp (>= 0.10.9) but it is not going to be installed E: Unable to correct problems, you have held broken packages. The command '/bin/sh -c apt-get clean && apt-get update && apt-get install --yes --no-install-recommends --no-install-suggests build-essential npm sudo build-essential net-tools inetutils-ping libncurses5-dev libdigest-crc-perl libpopt-dev xxd liblzo2-dev zlib1g-dev lib32z1 libssl-dev libglib2.0-dev libreadline-dev libjson-c-dev libxml2-dev libsqlite3-dev sqlite3 libuv1-dev libxslt1-dev libfcgi-dev libevent-dev libyajl-dev liburiparser-dev libwebsockets-dev locales lua5.1 liblua5.1-dev python python3 python3-dev python3-pip git git-lfs subversion autoconf automake pkg-config ccache cmake ninja-build clang-tools-6.0 bison flex gettext ca-certificates libtool patch vim unzip uuid-dev wget curl cpio bc gawk gdb valgrind diffstat chrpath texinfo ssh openssh-client openssh-server netbase quilt protobuf-c-compiler dropbear-bin openvswitch-switch tmux dirmngr lighttpd alien mlocate iproute2 dos2unix lsb-release rsync gdisk man pax moreutils npm sudo' returned a non-zero code: 100
最新发布
11-08
<think>我们面对的是Docker构建过程中出现的依赖错误:npm依赖node-gyp,但系统无法安装它,并提示有“held broken packages”。 根据之前的建议,我们可以尝试几种方法。但考虑到用户重复了相同的错误,可能需要更明确的步骤。 解决方案: 1. 尝试修复依赖:在安装大列表之前,先尝试运行`apt-get install -f`来修复依赖。 2. 分开安装:将npm的安装与其他包分开,或者使用其他方式安装npm(如从NodeSource安装Node.js和npm)。 3. 避免重复:注意在安装列表中,build-essential和npm、sudo被列出了两次(一次在开头,一次在中间和结尾)。这可能导致问题,但apt通常会处理重复。不过最好去除重复。 修改Dockerfile的建议步骤: 方法A:在安装前尝试修复并单独处理npm ```Dockerfile RUN apt-get clean && \ apt-get update && \ apt-get install -f -y && \ # 尝试修复可能的损坏 apt-get install --yes --no-install-recommends --no-install-suggests \ build-essential net-tools inetutils-ping \ ... \ # 其他包,注意不要重复 sudo && \ # 单独安装npm,或者使用其他方法 apt-get install --yes --no-install-recommends npm || echo "暂时忽略npm错误" && \ # 如果上述npm安装失败,则采用NodeSource方式 curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y nodejs ``` 方法B:完全跳过系统npm,使用NodeSource安装Node.js(包含npm) 修改Dockerfile如下: ```Dockerfile # 先安装其他包,排除npm RUN apt-get clean && \ apt-get update && \ apt-get install --yes --no-install-recommends --no-install-suggests \ build-essential net-tools inetutils-ping \ ... \ # 其他所有包,除了npm sudo # 注意不要包含npm # 然后通过NodeSource安装Node.js和npm RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y nodejs ``` 注意:在方法B中,我们分成了两个RUN命令,这样如果第一个安装命令成功,第二个专门处理npm,避免互相影响。 错误分析:Ubuntu 18.04默认仓库中的npm版本较旧,可能与其他包的依赖存在冲突。因此,使用NodeSource的版本通常更可靠。 另外,注意在安装列表中,`build-essential`被重复了两次(一次在开头,一次在第三行),虽然apt可以处理,但最好去除重复。 如果用户坚持使用系统自带的npm,则需要解决依赖冲突,可能需要手动安装node-gyp或者调整仓库源。 但是,根据错误信息,最直接的方法就是使用NodeSource安装Node.js和npm。 因此,我推荐方法B。 修改后的RUN命令(去除重复并排除npm): 注意:以下列表去除了重复的build-essential和npm,并在第二步安装nodejs 第一步:安装除npm外的所有包 第二步:通过NodeSource安装nodejs(包含npm) 具体步骤: ```Dockerfile # 步骤1:安装除npm外的所有依赖 RUN apt-get clean && \ apt-get update && \ apt-get install --yes \ --no-install-recommends \ --no-install-suggests \ build-essential \ net-tools \ inetutils-ping \ libncurses5-dev \ libdigest-crc-perl \ libpopt-dev \ xxd \ liblzo2-dev \ zlib1g-dev \ lib32z1 \ libssl-dev \ libglib2.0-dev \ libreadline-dev \ libjson-c-dev \ libxml2-dev \ libsqlite3-dev \ sqlite3 \ libuv1-dev \ libxslt1-dev \ libfcgi-dev \ libevent-dev \ libyajl-dev \ liburiparser-dev \ libwebsockets-dev \ locales \ lua5.1 \ liblua5.1-dev \ python \ python3 \ python3-dev \ python3-pip \ git \ git-lfs \ subversion \ autoconf \ automake \ pkg-config \ ccache \ cmake \ ninja-build \ clang-tools-6.0 \ bison \ flex \ gettext \ ca-certificates \ libtool \ patch \ vim \ unzip \ uuid-dev \ wget \ curl \ cpio \ bc \ gawk \ gdb \ valgrind \ diffstat \ chrpath \ texinfo \ ssh \ openssh-client \ openssh-server \ netbase \ quilt \ protobuf-c-compiler \ dropbear-bin \ openvswitch-switch \ tmux \ dirmngr \ lighttpd \ alien \ mlocate \ iproute2 \ dos2unix \ lsb-release \ rsync \ gdisk \ man \ pax \ moreutils \ sudo # 步骤2:通过NodeSource安装Node.js和npm RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y --no-install-recommends nodejs ``` 注意:上面第一步安装命令中已经去除了npm,因为第二步会安装nodejs(包含npm)。另外,第二步中使用了`--no-install-recommends`以减少空间。 如果用户不需要特定版本的Node.js,18.x是一个LTS版本,稳定且长期支持。如需其他版本,可更改版本号。 这样修改后,应该能避免npm依赖冲突的问题。 §§相关问题§§ 1. 如何在Dockerfile中安全地添加第三方软件源(如NodeSource)并安装软件? 2. 当Docker构建过程中出现软件包依赖冲突时,有哪些系统性的调试方法? 3. Ubuntu 18.04官方仓库中的npm版本过低可能导致哪些兼容性问题? 4. 在Docker镜像构建中,如何最小化镜像体积同时确保依赖兼容性? 5. 如何为不同的Ubuntu版本选择合适的NodeSource安装脚本? </think>根据您提供的 Docker 构建错误日志,问题与之前相同:**npm 依赖 node-gyp 但无法安装**,且存在**被保留的损坏软件包 (held broken packages)**。以下是具体分析和解决方案: ### 问题核心原因 1. **依赖版本冲突** Ubuntu 18.04 (bionic) 官方源中的 npm 包要求 node-gyp ≥ 0.10.9,但当前仓库无法满足此依赖(仓库版本可能过旧或不兼容) 2. **软件包锁定** `held broken packages` 表示某些软件包被标记为"保留状态",常见原因: - 多个第三方源混合导致版本冲突 - 部分依赖被手动锁定版本(`apt-mark hold`) - 之前安装失败的残留配置 3. **潜在环境问题** 构建日志显示从 `archive.ubuntu.com` 和 `security.ubuntu.com` 下载包,但未检测到第三方源,可能是 Ubuntu 官方源的版本兼容性问题 --- ### 修复方案(修改 Dockerfile) #### 最佳方案:绕过系统 npm,使用 NodeSource 安装 ```dockerfile # 步骤1:安装除npm外的所有依赖 RUN apt-get clean && \ apt-get update && \ apt-get install --yes \ --no-install-recommends \ --no-install-suggests \ build-essential net-tools inetutils-ping \ libncurses5-dev libdigest-crc-perl libpopt-dev xxd \ # ... 其他所有包省略npm ... sudo # 注意:此处移除npm # 步骤2:通过NodeSource安装Node.js和npm RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y --no-install-recommends nodejs ``` #### 备选方案:强制清理后重试 ```dockerfile RUN apt-get clean && \ # 修复残留锁定 rm -rf /var/lib/apt/lists/* && \ dpkg --configure -a && \ apt-get update -y && \ # 尝试修复依赖树 apt-get install -f -y && \ # 重新安装(保留npm) apt-get install --yes \ --no-install-recommends \ --no-install-suggests \ build-essential net-tools ... npm sudo ``` --- ### 关键注意事项 1. **去除重复项** 您的原始命令中 `build-essential` 和 `npm sudo` 出现两次,修正为单次出现 2. **依赖诊断技巧** 构建前可添加调试命令检查冲突源: ```dockerfile RUN apt-cache policy npm node-gyp # 查看可用版本 RUN apt-mark showhold # 检查被锁定的包 ``` 3. **版本兼容性** Ubuntu 18.04 官方源的 npm 版本为 3.5.2,而当前 LTS Node.js 自带 npm ≥8.x,**推荐始终使用 NodeSource 安装** 4. **构建优化** 拆分大型 `RUN` 指令为多步骤,便于缓存和调试: ```dockerfile RUN apt-get update && apt-get install -y base-packages... RUN curl ... | bash - && apt-get install -y nodejs ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值