临时别名 cmd 以压缩现有命令,然后在脚本退出时过期
Temporary alias a cmd to squash an existing command, then expire upon script exit
假设命令 bam
在我的系统上。我们将其称为 bam1。
假设我的系统上有另一个版本的 bam
二进制文件(bam2,尽管它的名称可能大不相同)。
当我 运行 some-script
时,我希望在该脚本(和所有子进程)中对 bam
的所有调用都使用 bam2。否则他们将使用 bam1,因为默认情况下 bam1 在该环境的 $PATH 中。
假设我有可用的 bam2 的完整路径。
假设 bam
可能 运行 个 也 调用 bam
的子进程
假设如果出现任何问题,bam
必须 恢复到 bam1。
假设现在是 unix-ish 系统,但 Windows 支持 welcome。
$ alias bam="bam2" && bam # <== doesn't quite work. see ls test below
$ alias bam="ls" && ls # <== "-bash: bam: command not found"
我需要暂时用另一个应用程序二进制指针覆盖。使用目的是针对 nodejs 应用程序,所以我可以在那里做一些在节点上下文中执行更好的 x 平台的东西会很棒。
我考虑过创建一个 tmp 符号链接并将其文件夹添加到系统 PATH 中,但我觉得可能有更简单的方法。
有什么建议吗?
您可以创建一个临时目录
tmpdir=`mktemp -d`
将其标记为在退出时移除
trap 'rm -rf "$tmpdir"' exit
将其添加到您的路径中:
PATH="$tmpdir:$PATH" #<= This is the key part
然后在 $tmpdir
中放置一个以您的覆盖命名的 link
ln -s "$(which bam2)" "$tmpdir"/bam
你从这里产生的任何进程都将继承 PATH
变量(它是一个环境(=exported)变量),如果他们试图搜索可执行文件,你的临时目录是他们首先搜索的.
如果您担心安全问题,您会希望将其设为(可能是永久的)只读目录,而不是临时的可写目录。
假设命令 bam
在我的系统上。我们将其称为 bam1。
假设我的系统上有另一个版本的 bam
二进制文件(bam2,尽管它的名称可能大不相同)。
当我 运行 some-script
时,我希望在该脚本(和所有子进程)中对 bam
的所有调用都使用 bam2。否则他们将使用 bam1,因为默认情况下 bam1 在该环境的 $PATH 中。
假设我有可用的 bam2 的完整路径。
假设 bam
可能 运行 个 也 调用 bam
的子进程
假设如果出现任何问题,bam
必须 恢复到 bam1。
假设现在是 unix-ish 系统,但 Windows 支持 welcome。
$ alias bam="bam2" && bam # <== doesn't quite work. see ls test below
$ alias bam="ls" && ls # <== "-bash: bam: command not found"
我需要暂时用另一个应用程序二进制指针覆盖。使用目的是针对 nodejs 应用程序,所以我可以在那里做一些在节点上下文中执行更好的 x 平台的东西会很棒。
我考虑过创建一个 tmp 符号链接并将其文件夹添加到系统 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
变量(它是一个环境(=exported)变量),如果他们试图搜索可执行文件,你的临时目录是他们首先搜索的.
如果您担心安全问题,您会希望将其设为(可能是永久的)只读目录,而不是临时的可写目录。