假设命令 bam
在我的系统上。我们将其称为 bam1。
假设我的系统上有另一个版本的 bam
二进制文件(bam2,尽管它的名称可能有很大不同)。
当我运行some-script
时,我希望在该脚本(以及所有子进程)中对bam
的所有调用都使用bam2。否则他们将使用 bam1,因为默认情况下 bam1 位于该环境的 $PATH 中。
假设我有可用的 bam2 完整路径。
假设 bam
可能运行也调用 bam
的子进程
假设如果出现任何问题,bam
必须恢复为 bam1。
现在假设使用 UNIX 系统,但欢迎 Windows 支持。
$ alias bam="bam2" && bam # <== doesn't quite work. see ls test below
$ alias bam="ls" && ls # <== "-bash: bam: command not found"
我需要暂时用另一个应用程序二进制指针覆盖。使用目的是针对 Nodejs 应用程序,因此我可以在那里做一些在 Node 上下文中执行更好的 x 平台的事情,这会很棒。
我考虑过制作一个 tmp 符号链接(symbolic link)并将其文件夹添加到系统 PATH 中,但我感觉可能有更简单的方法。
有什么建议吗?
最佳答案
您可以创建一个临时目录
tmpdir=`mktemp -d`
将其标记为退出时删除
trap 'rm -rf "$tmpdir"' exit
将其添加到您的路径:
PATH="$tmpdir:$PATH" #<= This is the key part
然后在 $tmpdir
中放置一个以您的覆盖命名的链接
ln -s "$(which bam2)" "$tmpdir"/bam
您从此处生成的任何进程都将继承 PATH
变量(它是一个环境(=导出)变量),如果它们尝试搜索可执行文件,它们将搜索您的临时目录首先。
如果您担心安全性,则需要将其设置为(可能是永久的)只读目录,而不是临时的可写目录。
关于node.js - 临时别名命令以压缩现有命令,然后在脚本退出时过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100700/