node.js - 临时别名命令以压缩现有命令,然后在脚本退出时过期

标签 node.js bash unix alias

假设命令 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/

相关文章:

regex - bash 正则表达式 : how to match n times using 'grep' or 'ls'

arrays - 从目录中获取所有文件并将它们放入数组中

c - 共享变量的多处理竞赛

mysql - 如何创建 Cron 作业来将 MySQL 和 FTP 备份备份到我的备份服务器?

javascript - 如何访问 swig 上的主模型对象?

javascript - 我应该使用什么协议(protocol)以及它的文档是什么?

node.js - Passportjs Facebook 登录流程(passport-facebook vs passport-token)

linux - shell脚本中顺序执行命令并延迟下一条语句执行

c++ - 在 CPP 中将时间转换为 unix 时间

javascript - unhandledRejection 后是否需要重新启动我的应用程序