技术解析

cygwin 里 sh 与 bash 的环境不同怎么办!
0
2021-06-17 19:53:14
idczone

我的天,cygwin 里 sh 与 bash 的环境不同怎么办,修改了.bash_profile 只改变了 bash 的环境,sh 的环境没有变! 求大佬指点! 我是 windows10


我在.bash_profile 里 alias 了 python3,然后在 bash 里可以运行,在 sh 里不行。
我想调用一个 makefile,而 makefile 默认调用 sh,虽然可以改成 bash,但我想知道怎么修改 sh 的环境,有个笨办法是每次打开 sh 就 alias 一次。。。。

本来 bash 和 sh 就是不同的 shell 。要在 sh 中生效的话需要改 ~/.profile
https://unix.stackexchange.com/questions/45684/what-is-the-difference-between-profile-and-bash-profile

~/.profile 我改了还是不行。
我发现一个好办法,给需要运行的程序创建个软链接,因为这样会在 /usr/bin/下生成一个链接文件,这样多个 shell 之间就可以直接用了,不用设置环境。
```bash
ln -s /cygdrive/d/WPy64-3680/python-3.6.8.amd64/python.exe /usr/bin/python3
```

要是以前有一个不对的软软链接就用 ln -sf

可能是改错了?不过要给第三方软件调用 python 的话也不应该用 alias,alias 是给你自己敲命令时用的。同时如果某个程序不通过 shell,而是直接执行对应文件的话也是无效的。

有了 bash sh 的为什么要管

emmm 一般来说写 makefile 这种东西,最好不要和用户个人电脑的环境强绑定才好吧。。。不然哪天你换台电脑执行,就会感觉自己写这个 makefile 忒他么蠢了。说起 makefile,一般做法是使用环境变量确定编译器 /解释器的路径吧。当然还能给个默认值什么的。这样做比你 alias 更灵活。





最后一张图少截了一部分,用的是 export 设置了 PYTHON 环境变量的值。


而且用这种方式写 Makefile 的话,你大不了再写个额外的脚本,设置好环境变量,然后再调用你的 Makefile 。

原来 alias 是这个意思,我把它理解成像 c 语言的宏之类的东西了。
makefile 默认调用的是 /bin/sh,我不想改它的 SHELL 变量,就想两个统一一下
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服