linux – 设置临时环境($PATH)

前端之家收集整理的这篇文章主要介绍了linux – 设置临时环境($PATH)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可能会遇到这个问题的X-Y问题,如果我错了,我鼓励你们纠正我.

我想配置一个工具链环境,可以在不同的平台和不同的编译器版本上工作.我最初写了一个很长的Perl脚本,它生成只包含变量的配置Makefile.我想成为KISS所以我没有使用automake或autoconf编写任何复杂的东西.此外,我希望重新配置过程非常快.在我的情况下,我的家庭./configure在不到1秒钟内完成所有工作.我很满意.

但是我填写我可以使用更好的方法使用环境变量.而不是使用特定变量编写Makefile,我可以直接设置当前的shell环境.例如:

export cc=gcc

不幸的是,一些变量已在$PATH中声明.解决方案是在另一个前面添加新的$PATH:

export PATH=/new/toolchain/path:$PATH

echo $PATH
/new/toolchain/path:/old/toolchain/path:/usr/bin:/bin...

我填这是丑陋我想在添加新路径之前删除旧路径.

总结:

>使用环境而不是自定义makefile来设置构建配置是否更好?
>如何正确调整现有环境变量?

解决方法

当我有几个要设置的变量时,我编写了一个包装器脚本,然后我将其用作我想要修改的命令的前缀.这让我也可以使用前缀

>应用于单个命令,例如make,或
>初始化shell,以便后续命令使用更改的设置.

我用包装纸

>设置编译器选项(例如clang,设置CC变量,使配置脚本“看到”它作为选择的编译器),
>设置区域设置变量,使用POSIX C与en_US和en_US.UTF-8等进行测试.
>在减少的环境中进行测试,例如在cron中.

每个包装器都会执行识别正确PATH,LD_LIBRARY_PATH和类似变量所需的内容.

例如,我在大约十年前编写了这个特殊脚本来测试本地构建的python:

#!/bin/bash
ver=2.4.2
export TOP=/usr/local/python-$ver
export PATH=$TOP/bin:$PATH
export LD_LIBRARY_PATH=`newpath -n LD_LIBRARY_PATH -bd $TOP/lib $TOP/lib/gcc/i686-pc-linux-gnu/$ver`
if test -d $TOP
then
    exec $*
else
    echo no $TOP
    exit 1
fi

并将其用作-python-2.4.2 myscript.

一些包装器只是调用另一个脚本.
例如,我在configure脚本周围使用这个包装器来设置交叉编译的变量:

#!/bin/sh
# $Id: cfg-mingw,v 1.7 2014/09/20 20:49:31 tom Exp $
# configure to cross-compile using mingw32

BUILD_CC=${CC:-gcc}
unset CC
unset CXX

TARGET=`choose-mingw32`

if test -n "$TARGET"
then
    PREFIX=
    test -d /usr/$TARGET && PREFIX="--prefix=/usr/$TARGET"
    cfg-normal \
            --with-build-cc=$BUILD_CC \
            --host=$TARGET \
            --target=$TARGET \
            $PREFIX "$@"
else
    echo "? cannot find MinGW compiler in path"
    exit 1
fi

其中choose-mingw32和cfg-normal是脚本,它们(a)找到交叉编译器的可用目标名称,以及(b)为configure脚本提供其他选项.

其他人可能会建议shell别名或函数.我没有为此目的使用它们,因为我的命令行shell通常是tcsh,而我从(a)其他shell脚本,(b)directory editor或(c)text-editor运行这些命令.那些使用POSIX shell(除了当然,对于需要特定功能的脚本),制作少量使用的别名或功能.

猜你在找的Linux相关文章