在 Cygwin 下使用 PETSc

在 Cygwin 下使用 PETSc

我试图在 Windows 机器上的 Cygwin 下运行 PETSc 来测试并行代码。不幸的是,Cygwin 从我的 Windows 路径导入元素时出现了问题,格式如下:

C:\Program Files (x86)\...

问题是 PETSc 和 MPI 编译器无法正常工作,因为它们没有调用 cygpath 来修复“ ”字符。因此,我需要以下三点帮助:

  1. 如何让 Cygwin 不加载 Windows 路径

    • 我把它放在自己的分区上,并尝试只使用本机 Cygwin 编译器,这样它就可以在不了解太多 Windows 知识的情况下运行。
  2. 重写我的 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. 我根本就没有想到过这一点。

任何帮助将不胜感激。

答案1

如何让 Cygwin 不加载 Windows 路径

对于bashshell 来说,这可以通过对 进行一些小的更改来实现~/.bash_profile

我喜欢完全控制PATHCygwin 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

相关内容