我试图在 Windows 机器上的 Cygwin 下运行 PETSc 来测试并行代码。不幸的是,Cygwin 从我的 Windows 路径导入元素时出现了问题,格式如下:
C:\Program Files (x86)\...
问题是 PETSc 和 MPI 编译器无法正常工作,因为它们没有调用 cygpath 来修复“ ”字符。因此,我需要以下三点帮助:
如何让 Cygwin 不加载 Windows 路径
- 我把它放在自己的分区上,并尝试只使用本机 Cygwin 编译器,这样它就可以在不了解太多 Windows 知识的情况下运行。
重写我的 PATH 变量以将所有“ ”字符替换为“\ ”来转义它们
我知道这个:
echo $PATH | sed 's/ /\\ /g'
完全符合我的需要,但我无法让它在 .bashrc 中作为“export PATH=”命令执行。我试过:
export PATH='echo $PATH | sed '"'"'s/ /\\ /g'"'"' '
这会破坏我的 Cygwin 会话,以至于我需要修复 Notepad++ 中的 .bashrc 才能重新启动
export PATH="echo $PATH | sed 's/ /\\ /g'"
它只是在 PATH 前面添加了“echo”,并在后面添加了“| sed 's/\ /g”。
export PATH='echo $PATH | sed "s/ /\\ /g"'
它用“echo $PATH | sed“/\ /g”替换我的整个路径
- 我根本就没有想到过这一点。
任何帮助将不胜感激。
答案1
如何让 Cygwin 不加载 Windows 路径
对于bash
shell 来说,这可以通过对 进行一些小的更改来实现~/.bash_profile
。
我喜欢完全控制PATH
Cygwin bash,因此我将以下代码添加到我的~/.bash_profile
# Build up the path using the directories in ~/.path_elements
unset PATH
while read line; do
PATH="${PATH}$line";
done < ~/.path_elements
# Add current directory to path
export PATH=".:${PATH}"
笔记:
unset PATH
删除任何PATH
已由 Cygwin 启动代码配置的内容。循环
while
从我的主目录中的文件读取路径元素(~/.path_elements
)来构建我的首选PATH
最后我们将当前目录添加
.
到PATH
并导出。将当前目录添加到
PATH
可能被视为安全风险,因为内置命令可能会被位于当前目录中的命令替换。如果您选择使用我的代码,请记住这一点。
我的内容~/.path_elements
如下。您可以根据自己的喜好进行修改和调味,为路径添加额外的元素。
/home/DavidPostill/bin:
/usr/local/bin:
/usr/bin:
/c/Windows/system32:
/c/Windows
结果:
DavidPostill@Hal /f/test
$ echo $PATH
.:/home/DavidPostill/bin:/usr/local/bin:/usr/bin:/c/Windows/system32:/c/Windows