window tcl 需要配window10设置环境变量量吗

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 19, 距离下一级还需 181 积分
论坛徽章:0
tcl语言能够实现吗?谢谢各位
稍有积蓄, 积分 334, 距离下一级还需 166 积分
论坛徽章:0
请问各位大哥,tcl语言能够取环境变量吗?谢谢先。
[quote]原帖由 &sparkzcl&]tcl语言能够实现吗?谢谢各位 [/quote 发表:
对阿,怎么把一个程序外部的参数读入变量
不可能用个配置文件吧
白手起家, 积分 12, 距离下一级还需 188 积分
论坛徽章:0
请问各位大哥,tcl语言能够取环境变量吗?谢谢先。
foreach item [array name env] {
& & puts stdout &$itemenv($item)&
试试执行上面的语句
白手起家, 积分 18, 距离下一级还需 182 积分
论坛徽章:0
请问各位大哥,tcl语言能够取环境变量吗?谢谢先。
请访问Tcl语言中文网
www.tclchina.com
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处博客访问: 192429
博文数量: 47
博客积分: 2455
博客等级: 大尉
技术积分: 558
注册时间:
认证徽章:
分类: WINDOWS 10:25:23
由于测试基本都是Tcl写成的, 所以工作中不可避免的需要Tcl, 不可避免的经常需要编译Tcl.对于Win32而言, 可以从www.activestate.com直接下载Win32的msi文件, 进行安装. 当然也可以从www.tcl.tk下载源代码进行编译, tcl.tk的源代码中提供了Win32的编译配置, 但是没有包含x64的编译配置, 所以在win64上, 编译Tcl就有点小小的困难.本文以Win64上编译Tcl8.4.17为例.下载和解压的具体过程不必说了, 直接说说编译.切换到windows的编译目录, win下cd win而后, 查看makefile.vc,这个是windows下的makefile,用nmake来运行.比如我的是amd64为的机器, 我要编译出包含符号表的多线程版本,命令就是:nmake -f makefile.vc MACHINE=AMD64 OPTS=threads,symbos要安装就是:nmake -f makefile.vc install MACHINE=AMD64 INSTALLDIR=C:\Tcl_64如果是IA64,则将AMD64改为IA64即可.由于一般使用的是x86的visual studio,所以可能会有一些错误:1 编译过程中有时提示nmake/cl之类的不相容的问题, 这应该是版本问题, 编译时应该使用这些工具的64位版本, 而不是32位版本:具体来说,运行命令行前, 应当先设置好:call "C:\Program Files(x86)\Microsoft Visual Studio 8\VC\vcvarsall.bat" amd642 bufferoverflowU.lib not found许多机器上,这个是存在的,有些则不存在, 所以要自己根据需要来修改nmakehlp.c和Makefile.vc. 一般去掉比较好. 如果不去掉, 自己在编译的路径上, 把该库文件位置加入到编译的库路径中, 主要是对环境变量LIBPATH的修改3 还有一些是stati64 not found的问题,这类问题可能需要修改generic/tclh.以上,只是我碰到的问题. 当然,有可能也没有任何问题,因为机器环境,编译器版本等等不同.具体碰到的问题, 欢迎交流.
阅读(4172) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~
Niubility!不顶不行。
请登录后评论。Cygwin是一个在windows平台上运行的unix模拟环境。它对于学习unix/linux操作环境、在Windows上使用GNU工具集进行应用程序开发或移植、系统管理等,都非常有用。
关于Cygwin的安装配置等,其实比较简单,网上也有不少讲解,此处仅以个人使用习惯作一次记录,未必适合所有人。我的大体目标如下:
- 保持Cygwin原汁原味,尽量不改动Cygwin,也尽量不加入自己的东西;
- 尽量做到绿色化,尽量不对现有Windows系统作修改;
- 便携化,可以将Cygwin复制到其它机器上或是新的系统中,并仍能正常运行;
- 方便维护和升级。
上面提到便携化,Cygwin本身其实也可以勉强算是“绿色便携”的,但有一些问题,比如将Cygwin复制到新系统会有文件和目录的权限问题,用户名及SID的映射也要重新设置,还有它运行时会生成一些运行时文件,等等。
有一些现有的项目或工具可以帮助我们实现便携化,比如,可以到&http://portableapps.com 搜索 Cygwin 并下载,或者,参考&https://github.com/CybeSystems/CygwinPortable 或&https://github.com/ntmoe/CygwinPortable,当然还有其它一些类似的开源项目,它们大都是提供了一些脚本、工具和安装指南,以引导你安装Cygwin。
不过,我打算以自己的方式从头构建 Cygwin。
首先,规划好安装目录,比如 C:\Cygwin,下面我用一个环境变量 CYGWIN_ROOT 来表示它。也可以考虑建立一个 VHD 虚拟硬盘,将 Cygwin 装入这个 VHD 中,不仅方便携带,也利于放到虚拟机中共享。
然后从&http://cygwin.com 下载安装文件(32位版本的安装文件为setup-x86.exe,64位的是setup-x86_64.exe)到安装目录。也可以从&http://www.redhat.com/software/cygwin/&下载安装文件,但两处下载的文件是不同的,redhat.com 提供的 cygwin.dll 版本比 cygwin.com 提供的要新,而且,在安装时,两者所提供的镜像源不同,redhat那里下载的安装文件在默认情况下只提供一个镜像源(ftp://ftp.ges.redhat.com/cygwin),而两者的安装镜像源似乎并不通用。
一般来说,cygwin.com 和 redhat.com 所提供的安装文件,随便选用哪个都可以。安装方式以图形化交互方式最为简单,直接运行所下载的文件,按提示进行选择即可。
1.2 安装脚本
也可基于 command-line 进行安装,比如写个批处理文件放到安装目录中:
echo Cygwin installer.
echo Copyright (c) 2014 Chen Zhiqiang. Released under the MIT license.
echo The script used to install cygwin in quiet mode. Maybe you should adjust this script first.
echo It's a good idea that set CYGWIN_ROOT and CYGWIN_CACHE before call this script.
::CYGWIN_ROOT: Cygwin will be installed to this path
if not defined CYGWIN_ROOT set CYGWIN_ROOT=%~dp0
if "%CYGWIN_ROOT:~-1%"=="\" set CYGWIN_ROOT=%CYGWIN_ROOT:~0,-1%
::CYGWIN_CACHE: Local package directory
if not defined CYGWIN_CACHE set CYGWIN_CACHE=%CYGWIN_ROOT%\packages
::CYGWIN_MIRROR: Download site
if not defined CYGWIN_MIRROR set CYGWIN_MIRROR=http://mirrors.kernel.org/sourceware/cygwin/
::CYGWIN_SETUP: Cygwin setup program
if defined CYGWIN_SETUP if exist %CYGWIN_SETUP% goto PRE
set CYGWIN_SETUP=
for %%i in (setup*.exe) do (
set CYGWIN_SETUP=%%~fi
if not defined CYGWIN_SETUP set /P CYGWIN_SETUP=Input the path of cygwin setup program:
::CATEGORIES: Specify entire categories to install
set CATEGORIES=Base,Admin,System
::PACKAGES: Specify packages to install
::Audio packages
set PACKAGES=sox,sox-fmt-flac,sox-fmt-wavpack
set PACKAGES=%PACKAGES%,postgresql,postgresql-client
::Devel packages
set PACKAGES=%PACKAGES%,autobuild,autoconf,automake,binutils,make,cmake,gcc-g++,gdb
set PACKAGES=%PACKAGES%,mingw-gcc,mingw64-i686-gcc,mingw64-x86_64-gcc,clang,llvm
set PACKAGES=%PACKAGES%,gendef,git,git-svn,cvs2svn,bzr,cygport,cygwin64,doxygen,indent
set PACKAGES=%PACKAGES%,patch,pkg-config,swig,tcl,tcl-tk,gawk,lua,perl,python,ruby
::Graphics
set PACKAGES=%PACKAGES%,gnuplot,gd,ImageMagick,optipng,pngcrush,popper,popper-data,exif
set PACKAGES=%PACKAGES%,aria2,curl,openssh,rsync,wget,tftp,tftp-server
set PACKAGES=%PACKAGES%,bzip2,cpio,genisoimage,gnupg,mkisofs,upx,vim,hexedit
set PACKAGES=%PACKAGES%,xorg-server,xinit,XtoW,xauth,xhost
echo Installing Cygwin using these settings: (Press CTRL+C to abord)
CYGWIN_ROOT=%CYGWIN_ROOT%
CYGWIN_CACHE=%CYGWIN_CACHE%
CYGWIN_MIRROR=%CYGWIN_MIRROR%
CATEGORIES=%CATEGORIES%
PACKAGES=%PACKAGES%
choice /T 8 /D Y /M "Confirm (continue after 8 seconds)"
if ERRORLEVEL 2 goto :EOF
if ERRORLEVEL 1 goto Install
%CYGWIN_SETUP% -q -B -N -n -d ^
-R %CYGWIN_ROOT% ^
-l %CYGWIN_CACHE% ^
-s %CYGWIN_MIRROR% ^
-C %CATEGORIES% ^
-P %PACKAGES%
根据自己的情况进行些调整,即可全自动安装Cygwin了。如想进行一些交互,或者仅以普通用户运行时遇到权限问题,应从命令参数中去掉 -q,这样可以在安装过程中进行交互和干涉。另外,如果用的是从 redhat.com 下载的安装文件,那么不需要加 -s 参数,因为 redhat.com 提供的那个安装文件默认只有一个镜像源,而且我在批处理中所用的那个镜像源也不适用于它。
至于Cygwin镜像,我一般使用,或是国外的& 或&。
安装过程结束后,应该先检查 %CYGWIN_ROOT%/var/log/setup.log 看看有无错误发生。
为了便携化的目的,在上面的批处理中我使用了 -N -n -d 这些参数,这使得Cygwin不会自动生成菜单和快捷方式。如果不考虑便携,那么应该将这几个参数去掉,而且可以略过2、3这两章节。
若要得到一个干净的便携化的Cygwin,在安装完成后一定不要运行Cygwin!因为Cygwin会在运行时生成一些文件(/cygdrive/..., /var/..., /home/...)。
2. 便携化配置
首先应该说明一点,对 Cygwin 来说,便携化并非那么重要,毕竟,它在运行时需要管理 Windows 的用户及权限与它自身的 posix 系统之间的映射,还要在运行时生成一些动态信息,等等问题。一般情况下,使用 Cygwin 的安装程序安装和配置 Cygwin 就足够了。
如果是嫌 setup 程序网络下载太慢,那么可以在安装完成后,备份 setup 程序以及所下载的包文件目录(参看上面批处理中的 CYGWIN_CACHE),在新系统中,将这个备份复制过来,运行 setup 时选择从本地安装即可。
而我后面所述的操作,在某种程度上其实是复杂化了,看起来更像是打造个人所使用的 Cygwin,或只是一个小团队所使用的 Cygwin,但至少对我是有意义的,毕竟,我不想在每个新系统中都再执行一次 setup。
2.1 文件清理
Cygwin的安装程序会在它所在的目录下,以及 $CYGWIN_ROOT/var/log目录下,留下两个日志文件: setup.log 和 setup.log.full,可以清理它们。
安装 fontconfig 包时,fontconfig 的 postinstall 脚本会在 $CYGWIN_ROOT/var/cache/fontconfig 目录下生成缓存文件,因为这些文件很小,而且 Windows 上的字体信息大致上也差不多,我没有清理它们。如果清理了也没关系,可以在以后的使用中调用 /etc/postinstall/fontconfig.sh.done 或者运行 fc-cache -r 重新生成缓存。
安装程序还会在注册表中留下安装信息,不过 Cygwin 的运行并不依赖它,安装配置完成后可以将注册表里的这些信息删除。
2.2 修改文件权限
Windows 的权限系统与 posix 标准不同,而 Cygwin 试图在 Windows 上模仿和实现 posix 权限。一般情况下,Cygwin 做的很棒,但对我现在要打造的这个 Cygwin 来说是个麻烦。Cygwin的安装程序会将所安装的文件的属主设成当前Windows用户,并把这些文件的属组设置成 NONE(至少在Win8.1下是这样)。如果要在一个新的系统中使用 Cygwin,因为用户信息变了,这些文件的owner id 与 group id都会变成未知。即使新系统的登录名与原系统一样也没用,因为用户的真正标识是SID。
查看 %CYGWIN_ROOT%\etc 下的 passwd 和 group 这两个文件,会发现一个名为Administrators的用户名,其对应的组名也是 Administrators,uid 和 gid 都是 544,对应的 SID 是&S-1-5-32-544,这个 SID 在各个 Windows 系统中是不变的,它代表内置的管理员组。在Windows上,文件的所有权并不区分组和用户。
我们可以据此重设 Cygwin 目录的属主。以管理员身份打开一个 CMD 窗口,cd 到 Cygwin 的安装目录,然后运行以下命令:
:: cd /d %CYGWIN_ROOT%
takeown /F cygdrive /A
icacls cygdrive /reset
bin\chown Administrators:Administrators Cygwin*.*
bin\chown Administrators:Administrators home
bin\chown -R Administrators:Administrators usr lib bin sbin etc var tmp dev
注意,上面的命令序列有可能造成现有使用中的 Cygwin 不能正常运行,即便是对于新装的 Cygwin,我也不作任何担保。而且,别指望上面这几行设置能适用于所有的应用场景,不同的软件对权限的要求是不一样的,有时你还是得根据自己要用的软件对某些目录做权限修改。
2.3 清除用户信息
在Cygwin的安装过程中会生成&/etc/passwd和/etc/group&这两个文件,它们把 Windows 的用户映射到Cygwin的 posix 系统上。然而,当把 Cygwin 复制到另一个系统中运行时,因 SID 的变化,这两个文件的有些记录会无效。
一种粗暴的办法,删除这两个文件。当在新系统中使用 Cygwin 时,以管理员身份启动 Cygwin 的 bash shell,然后使用 mkpasswd 和 mkgroup 来重建它们:
# if you are a domain user, you should use the "-d" option.
mkpasswd -l & /etc/passwd
mkgroup -l & /etc/group
保守点的办法,从这两个文件里删除那些 SID 可能会变化的记录。有些 SID 是固定不变的,比如 SYSTEM 和 Administrators 等,这些记录可以保留。可以参考 Cygwin 的指南&
以及& . &当在新系统中使用 Cygwin 时,只要在使用前先设置好 USERNAME 和 HOME 环境变量,不做其它改动也可以部分使用 Cygwin。然而,这是有缺陷的,毕竟是少了当前用户的信息,要想完整地使用 Cygwin,仍需要管理员去重新生成 passwd 和 group。
2.4 修改Cygwin.bat
Cygwin 的运行与它的安装路径其实没什么关系,然而,Cygwin.bat 这个文件里却写死了它的运行路径。我不清楚是什么人基于什么样的理由把它写成那样,我对它做了下修改:
%~dp0\bin\bash --login -i
3. 便携化包装与移动
至此,所得到这个 Cygwin 已经是一个与本机环境无关的系统了,现在到了关键的一步:如何方便地将它部署到新系统上呢?
常规方式,将这个 Cygwin 压缩为文件,在新系统中解压到某目录,即可正常运行其中的 Cygwin.bat 了。
我的想法,将 Cygwin 封装到一个映像文件中去,每个系统都以此为基础,使用它的一个差分映像。要实现这个想法,有两种方法:差分VHD 和 WIM。
3.2 差分VHD方式
首先准备一个VHD虚拟硬盘,将 Cygwin 灌装其中。如果一开始就是在一个VHD上进行安装的,那要省事不少,否则就要再将 Cygwin 复制到这个 VHD 中,复制时要注意权限问题。
之后,可以给该VHD建立一个差分VHD,以后就挂载这个差分VHD来使用Cygwin,母VHD中始终是与具体机器环境无关的干净的Cygwin。
使用 VirtualBox 时,则可以直接以“多重挂载”方式挂载母VHD,每个虚拟系统都会在其上建立一个Snapshot,之后的使用会沿着各自的分支走下去。
3.3 WIM 映像
WIM 映像可以包含多个卷,多个卷之间可以共享相同的文件,而且 WIM 映像可以挂载,因此把 Cygwin 装到 WIM 中也是个选择。在 Win8 以上版本,可以使用 dism,其它版本的 Windows 可以使用 imagex。
首先,Capture 第一个WIM卷。假设&CYG_HOME 代表安装目录,如 X:\Cygwin,CYG_WIM 代表WIM映像,如 X:\Cygwin.wim。使用 dism 进行 capture:
DISM /Capture-Image /ImageFile:%CYG_WIM% /CaptureDir:%CYG_HOME% /Name:Cygwin /Compress:fast
或者使用 ImageX:
imagex /capture %CYG_HOME% %CYG_WIM% "Cygwin"
然后,Append 第二个卷:
DISM /Append-Image /ImageFile:%CYG_WIM% /CaptureDir:%CYG_HOME% /Name:Cygwin-2
imagex /append %CYG_HOME% %CYG_WIM% "Cygwin-2"
使用时,挂载第二个卷,第一个卷保持是与机器环境无关的干净的映像。比如把Cygwin挂载到X:\Cygwin:
DISM.exe /Mount-Image /ImageFile:%CYG_WIM% /Index:2 /MountDir:X:\Cygwin
imagex /mountrw %CYG_WIM% 2 X:\Cygwin
要保存时,不要忘记最后卸载时候进行commit:
DISM.exe /Unmount-Image /MountDir:X:\Cygwin /Commit
imagex /unmount /commit X:\Cygwin
不过,挂载WIM的时候也许耗时较长,至少在我这里是这样的。因此,实际上我只是用 WIM 对 Cygwin 做备份。从备份角度来说,WIM 要比 VHD 好一些,某些场合下比打包成压缩文件要好。
4.1 权限修复
又一次,提到了权限问题,够啰嗦!但如果你经常在几个系统间使用同一份Cygwin,或者重装了系统而直接使用原先使用过的Cygwin,或者其它什么原因导致SID变化、权限变化等,Cygwin的一些文件可能会无法写入或无法删除,用管理员操作都不行,那该怎么办?
这时,可以先用takeown取得文件的所有权,比如:takeown /F %CYGWIN_ROOT% /R /D Y,或者,如果要把文件属主改为 Administrators 组,那么使用 takeown 时再加个 /A 参数。之后,可以使用管理员身份按照2.2所述修改文件权限,或者使用icacls对文件权限进行重置。
不过,这些操作是有一定危险性的,要小心。还有,有些软件或文件需要一些特别设置。
另外,有些文章提到了关闭cygwin的Linux权限模拟,这可以通过修改etc/fstab文件来实现,在其中加上noacl参数,比如:none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
不过,我不建议你这么做,我对此也了解不多。
4.2 PATH, cygstart, 以及更好的 Cygwin.bat
经过以上的步骤,Cygwin已经可以在新系统中使用。执行 Cygwin.bat 可以以当前Windows用户的身份登录Cygwin系统并获得一个交互式Shell。另外,还可以将Cygwin的 bin 和 sbin 的路径加入到Windows的PATH环境变量中,这样,在Windows的命令行中或批处理中,也可以使用Cygwin的工具。不过要注意的是,Cygwin的有些程式与Windows的同名,比如find和date。
除了把Cygwin加入PATH,进一步,有没有办法可以用一个命令打开任何可以在 Cygwin 里打开的东西?在Linux中,有个 xdg-open 工具,可以打开或运行任何它所能识别的东西,在 Windows 中也有个类似的东西,叫做 start。比如,如果运行 start notepad,那么会打开notepad这个程序,如果运行 start some.txt,那么会调用一个编辑器来打开some.txt (取决于你给txt类型注册了什么编辑器,默认是notepad.exe)。然而,一般情况下 start 并不会识别 Cygwin 的脚本文件、软链接等等东西,在 Cygwin 中,有没有类似于 xdg-open 和 start 这样的东西呢?有,它就是 cygstart。
cygstart相当有用,你不必理会什么文件需要调用哪个程序来打开,只管把这文件传递给cygstart即可。如果你愿意,可以使用 cygstart 给 Windows 加个右键菜单:“Run in cygwin”。
如果把cygstart加入到Cygwin.bat会怎样?那个原生的Cygwin.bat太简陋了,我想让它复杂点:
- 如果无参数运行,其行为与原生Cygwin.bat一致,即,打开一个交互式Shell;
- 如果传参数给它,其行为与cygstart一致,即,调用cygstart,它会尝试接收所有传给它的参数并执行。
这样,我可以将Cygwin.bat固定到任务栏上,然后,点它即是打开一个Shell,而把任何文件拖到它上面,它则会调用cygstart来打开这些文件,比如,把一个shell脚本拖到它上面来运行。
要实现这些目标并不复杂,我们再次对Cygwin.bat进行改写:
if not defined CYGWIN_ROOT set CYGWIN_ROOT=%~dp0
if "%CYGWIN_ROOT:~-1%"=="\" set CYGWIN_ROOT=%CYGWIN_ROOT:~0,-1%
::Append Cygwin PATH
%PATH%; | findstr /I /C:";%CYGWIN_ROOT%\bin" &nul || PATH %CYGWIN_ROOT%\%CYGWIN_ROOT%\%PATH%
if defined %1 goto CYG_START
:CYG_SHELL
%CYGWIN_ROOT%\bin\bash --login -i
:CYG_START
%CYGWIN_ROOT%\bin\cygstart %*
4.3 用户名映射
在新环境下,应该先让管理员使用mkpasswd和mkgroup重新生成/etc/passwd和/etc/group。
默认情况下,Cygwin会使用Windows的登录名作为用户名。Cygwin会先读取/etc/passwd文件,根据当前Windows用户的SID找到对应的记录,该记录中的用户名不一定和Windows的相同。如果Cygwin在passwd文件中找不到对应的SID,那么它会读取USERNAME这个环境变量并以其值作为用户名。
了解了Cygwin的用户名映射的原理,就可以对它作一些特殊的改动和设置:
(1) 使用Cygwin之前设置USERNAME环境变量,Cygwin将以其值作为用户名;
(2) 修改/etc/passwd,可以更改用户名、家目录等信息,但要记住,passwd文件是使用Windows用户的SID来作关系对应的;
(3) 映射root用户。修改/etc/passwd,将某用户名修改为root,但关键的是,需要将id(不是SID)改为0。比如:
root:unused:0:513:U-FOO\SA,S-1-5-21-...:/home/SA:/bin/bash
可以参考官方的用户指南以了解更多:http://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-setuid
4.4 用户家目录(HOME)
缺省情况下,HOME=/home/用户名,并在用户第一次登录时生成该目录。有一些方法可以对HOME进行调整。
(1) 在/etc/passwd文件中指定用户家目录;
(2) 设置HOME环境变量。一旦设置了HOME环境变量,不管/etc/passwd文件中有无指定用户的家目录,Cygwin都将优先使用HOME环境变量的值作为用户家目录。
比如,我们想将Cygwin的用户家目录设为Windows的用户家目录,使得两者一致,那么我们可以在Windows的用户环境变量表中设置HOME=%USERPROFILE%,Cygwin会自动完成Windows路径到Cygwin路径的转换。
你也可以在命令行中或是在批处理中,在调用Cygwin工具之前,设置HOME变量,而不用永久地改变环境变量表。
Cygwin中似乎没有sudo命令,不过可以使用cygstart来部分地模拟它:&cygstart --action runas your_command_and_parameters
可以把它写成一个脚本:
cygstart --action runas "$@"
4.6 中文环境
新版本的Cygwin本身对中文的支持已经很好了,在Windows 8.1 中文版下,不用任何设置即可正确处理和显示中文。
- 控制台乱码
如果出现乱码,可编辑~/.inputrc:
set meta-flag on
set convert-meta off
set output-meta on
set input-meta on
上面的设置可能已存在于.inputrc文件中但被注释了,那么去掉相应行的注释即可。
并编辑~/.bashrc:
alias ls='ls --show-control-chars --color=auto'
如果还不能解决问题,试试看在~/.bash_profile文件的末尾加入:
export LANG=C.UTF-8
export LC_CTYPE=C.UTF-8
export XMODIFIERS=@im=Chinput3
stty cs8 -istrip
stty pass8
export LESSCHARSET=latin1
或者从网上找找解决方案,我是不想弄了,我这里不修改任何东西也没乱码,能不修改系统就不要修改系统。如果你还在用老版本的Cygwin,升级是个好主意。
在 ~/.vimrc 文件中加入下面设置:
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 fileencoding 和 fileencodings 分别是缺省文件编码和自动识别文件编码顺序。
4.7 Shell命令自动补全忽略大小写
修改~/.inputrc文件:
set completion-ignore-case on
另外,如果想让命令行在匹配文件时忽略文件名的大小写,那么还可以这样修改~/.bashrc:
shopt -s nocaseglob
4.8 系统更新与包管理
Cygwin的安装程序并不仅用于安装Cygwin,它同时也是系统更新工具和包管理工具,可以使用它更新系统、删除老旧的包,安装新的软件包。
安装程序还可以使用命令行的方式进行包管理工作。假设安装程序名为 setup-x86.exe,我们想像使用apt-get 那样安装 git 和 wget,那么可以使用管理员的身份这样执行:
setup-x86.exe -q -P git,wget
实际操作中你可能还需要-s、-R、-l等参数,如果那样的话你可以写个脚本把那些参数值固定下来。事实上我们只需要很少的操作即可像使用 apt 或 yum 那样使用 Cygwin 的 setup,不需要第三方的那些模仿 apt 或 yum 的工具。并非说那些工具不好,但它们大多更新不及时,不再适用于新版本的 Cygwin,或者早就不再更新,使用它们时要谨慎。
许多文章提到了 apt-cyg:
## cygwin下命令行安装软件
wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin/
apt-cyg install 软件名字
我查看了它的源码,还算不错。它仅仅是一个 shell 脚本,不需要其它依赖,可作为一个参考。不过,老老实实用官方的 setup 也许是最好的选择。
我写了一个批处理文件 cyg-setup.bat,它可以将命令行参数传递给 Cygwin 的 setup 程序,但它会自动补上&-R, -l, -s 参数。将这个批处理及 Cygwin 的 setup 程序一起放到 Cygwin 的安装目录下,可以在CMD里这样使用它:
:: 安装软件包
cyg-setup -q -P wget,ocaml-llvm,guile
::删除软件包
cyg-setup -q -x guile,tcl-tk
下面是这个批处理的源码:
@echo off && goto main
echo cyg-setup - Cygwin setup wrapper.
echo Copyright (c) 2014 Chen Zhiqiang. Released under the MIT license.
echo Usage is same to the cygwin setup program, but it will try to resolve these options if they omited: -R, -l, -s.
echo -R, use %%CYGWIN_ROOT%%, or, use the directory path of this program.
echo -l, use %%CYGWIN_CACHE%%, or, use %%CYGWIN_ROOT%%\packages.
echo -s, use %%CYGWIN_MIRROR%%, or, pass a default mirror site to the setup.
echo And, you can use the "acl" option (%0 acl) to reset ACL.
::CYGWIN_ROOT: Cygwin will be installed to this path
if not defined CYGWIN_ROOT set CYGWIN_ROOT=%~dp0
if "%CYGWIN_ROOT:~-1%"=="\" set CYGWIN_ROOT=%CYGWIN_ROOT:~0,-1%
::CYGWIN_CACHE: Local package directory
if not defined CYGWIN_CACHE set CYGWIN_CACHE=%CYGWIN_ROOT%\packages
::CYGWIN_MIRROR: Download site
if not defined CYGWIN_MIRROR set CYGWIN_MIRROR=http://mirrors.kernel.org/sourceware/cygwin/
if /i "%1"=="info" goto Info
if /i "%1"=="acl" goto ACL
::CYGWIN_SETUP: Cygwin setup program
if defined CYGWIN_SETUP if exist %CYGWIN_SETUP% goto PRE
set CYGWIN_SETUP=
for %%i in (setup*.exe) do (
set CYGWIN_SETUP=%%~fi
if not defined CYGWIN_SETUP set /P CYGWIN_SETUP=Input the path of cygwin setup program:
(echo %P% | findstr /C:" -R " &nul) || (echo %P% | findstr /C:" --root "&nul) || set P=%P% -R %CYGWIN_ROOT%
(echo %P% | findstr /C:" -l " &nul) || (echo %P% | findstr /C:" --local-package-dir " &nul) || set P=%P% -l %CYGWIN_CACHE%
(echo %P% | findstr /C:" -s " &nul) || (echo %P% | findstr /C:" --site " &nul) || set P=%P% -s %CYGWIN_MIRROR%
%CYGWIN_SETUP% %P%
takeown /F %CYGWIN_ROOT% /A
icacls %CYGWIN_ROOT% /reset
takeown /F cygdrive /A
icacls cygdrive /reset
set CHOWN=%CYGWIN_ROOT%\bin\chown.exe
%CHOWN% Administrators:Administrators home
%CHOWN% -R Administrators:Administrators usr lib bin sbin etc var tmp dev
这个脚本使用了几个变量:
CYGWIN_ROOT,Cygwin的安装目录,默认值为该脚本所在的目录;
CYGWIN_CACHE,Cygwin的软件包下载路径,默认值为 %CYGWIN_ROOT%\packages;
CYGWIN_MIRROR,Cygwin的安装镜像源,默认使用 mirrors.kernel.org。
这三个变量都可以通过设置环境变量来改变它们的位置。
4.9 VHD和WIM映像的更新
如果是将Cygwin安装到VHD或WIM映像文件中,如果想将大量的更新应用于基映像,那么应该先删除差分映像或是附加的分卷,挂载基映像,然后进行 Cygwin 的更新。
更新完成后,可能需要重新进行一些权限和用户方面的设置。之后,基于此映像可以重新建立差分映像或附加分卷。
- CYGWIN_ROOT, &HOME, TERM 环境变量
个人习惯,设置CYGWIN_ROOT环境变量,并将 %CYGWIN_ROOT%\bin 和 %CYGWIN_ROOT%\sbin&加入到PATH的后面,这样可以随处调用Cygwin的工具;
关于这个CYGWIN_ROOT,我一般是将Cygwin安装到某个盘的Cygwin目录下,不使用其它路径,可少带来一些麻烦(比如,Cygwin的startxdmcp.bat等文件使用了硬编码路径);
设置HOME环境变量以覆盖Cygwin在passwd中的设置,我把它设置为%USERPROFILE%,与Windows的用户家目录相同;
TERM可不设,或设为xterm。
- CYGWIN环境变量
许多文章都提到这个环境变量,然而,其中大部分都已经过时,请谨慎设置这个环境变量。
- 卸载Cygwin
除了菜单和快捷方式,Cygwin并不会在系统其它位置安装文件,将 Cygwin 目录删除即可。
如果将 Cygwin 装在了映像文件中,删除映像文件即可,否则就删 Cygwin 目录。
如果 Cygwin 目录遇到权限问题删除不了,请以管理员身份调用 takeown 和 icacls 重设文件权限。
最后,不要忘了删除Cygwin的注册表。
- 文件名大小写
Windows 的文件名一般是不区分大小写的,而 UNIX 类的系统基本上都区分文件名的大小写。Cygwin 可以实现文件名大小写的区别,其缘由是因为 Windows NT 以上版本的 kernel 事实上是支持文件名大小写区别的。可以参看这篇文章:。
& 著作权归作者所有
人打赏支持
码字总数 22936
我的唯一的问题是linux软件不熟 不知那些是需要的 希望指点迷津
这是个好东西
高大上,win下有这些工具还是很顺手的
评论删除后,数据将无法恢复
N年前倒腾过一次cygwin,当时体验感觉不好。到现在一直用的是GNU utilities for Win32,在Windows的CMD中使用*nix的命令工具包。 GNU utilities for Win32很久没有更新,utils的版本太低,很...
Windows下运 行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行;另一种是通过 Cygwin模拟Linux环境。后者的好处是使用比较方便,安...
小帅帅丶 ?
这边博文的目的有以下几点: 1、Win下安装cygwin 2、在cygwin中安装php环境和php开发环境 3、安装swoole扩展 4、设置PHPStorm和cygwin完成PHPStrom的远程调试配置 以下是正文部分: 1、Win下...
碳素云信息技术 ?
Cygwin是一个在windows平台上运行的类UNIX模拟环境。 与通过Window下虚拟机软件来安装一个Linux系统不同,Cygwin更加体现着两种操作系统直接互访的功能:Cygwin目录下的所有文件直接就可以在...
dhb_oschina ?
推荐方法: 首选通过Cygwin ports的库下载安装php和php_mysqli扩展,然后再安装drush。这样drush能工作的很好。 具体步骤: 1.进入dos界面,找到cygwin的安装文件setup.exe所在的目录,然后运...
sdsimple ?
第一天我先在window环境里搭建的这个本人当时什么都不懂 就感觉方便就在这里搞了 不过经过这个我也知道了什么是hadoop 环境了 受益匪浅 。 在Windows下部署hadoop前,都需要安装cygwin软件,...
1、安装JDK1.6或更高版本   官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件中的路径...
真是杨晓光 ?
1、安装JDK1.6或更高版本   官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件中的路径...
引鸩怼孑 ?
1、安装Cygwin 从http://www.cygwin.com/ 下载cygwin的setup.exe,双击运行: 选择从Internet安装: 设置安装目录: 设置安装包目录: 设置“Internet Connection”的方式,选择“Direct Co...
这是一个维护版本,主要是bug修复和调整,例如终端行设置,重新设计了退出处理以及修复了重新改变窗体大小的问题。 MinTTY 是一款专用于 Cygwin 环境的终端模拟器,它兼容于 Xterm,支持 UT...
没有更多内容
加载失败,请刷新页面
本文介绍 GLS 相关知识,说明如何正确设置 Informix GLS 语言环境相关变量(DB_LOCALE,CLIENT_LOCALE),保证 Informix 数据库服务器、客户端能正确的支持中文字符和支持使用中文的对象名。说...
wangxuwei ? 今天 ?
本文介绍Apache Zeppelin网页笔记本如何创建配置jdbc解释器,连接Oracle数据库,进行SQL开发,实现数据可视化。 简单来说,步骤如下: 下载ojdbc8.jar 创建新jdbc解释器 配置jdbc参数 测试新...
wffger ? 今天 ?
通常来说,每个程序员都有自己趁手的兵器:代码编辑器。你要是让他换个开发环境,恐怕开发效率至少下降三成。然而,每个人对编辑器的喜好各不相同,甚至引发出诸如“神的编辑器”与“编辑器之...
crossin ? 今天 ?
无极之岚 ? 今天 ?
LoSingSang ? 今天 ?
数据集的操作 以iris数据集为例,首先导入数据集 iris = datasets.load_iris() 数据集是一个类词典的数据,其属性有 data 数据集,类型是numpy的ndarray target 数据对应的类标记,类型是一维...
大不了敲一辈子代码 ? 今天 ?
大多数人对区块链可能还处于朦胧 状态,并不知道他的落地场景是如何的。其实现在区款链还处于当时互联网时代的电话线时代,应用很不广泛,并且大多数参与者都是抄币,割韭菜,被割。 今天给大...
arthur666 ? 今天 ?
HotFrameLearning Redis_01_简介 一、大致介绍 1、介绍Redis之前,我有一堆的疑问,Redis是什么?有什么用?它能干什么?有什么特性?能解决我们日常的哪些问题?
为什么要用Redis?Redis...
HMILYYLIMH ? 今天 ?
特殊符号 * 代表零个或多个任意字符 ? 代表一个任意字符 #注释符号,后面的内容会被忽略 \脱义字符会把后面的特殊符号还原为普通字符 | 管道符 用作将前面的命令输出作为后面命令的输入 命令...
黄昏残影 ? 昨天 ?
导读 Linux下怎么一步到位设置系统时间。拿linux虚拟机做实验的朋友会知道。当你把linux还原到某个点的时候,vmware帮不了你把系统时间也给重设了。所以这时候就要手工来搞。关于怎么设Linux...
问题终结者 ? 昨天 ?
没有更多内容
加载失败,请刷新页面
文章删除后无法恢复,确定取消删除此文章吗?
亲,自荐的博客将通过私信方式通知管理员,优秀的博客文章审核通过后将在博客推荐列表中显示
确定推荐此文章吗?
确定推荐此博主吗?
聚合全网技术文章,根据你的阅读喜好进行个性推荐
指定官方社区
深圳市奥思网络科技有限公司版权所有

我要回帖

更多关于 window 查看环境变量 的文章

 

随机推荐