我有一个运行具有长路径名的可执行文件的脚本。我想存根这个可执行文件,这样我就可以测试脚本

I have a script that runs an executable with a long path name. I want to stub out this executable so I can test the script

正如标题所说,我有一个脚本可以从很长的路径名启动可执行文件。我实际上无法对脚本进行任何更改,因为它不是我的,但我需要能够对其进行测试。我基本上想做这样的事情:

alias /some/really/long/path/name/for/this/executable/run.sh='/usr/bin/echo'

但是,这不适用于别名中的 /

我怎样才能让运行的脚本正常,但是"stub"或"mock"那一行呢?问题行在一个函数中,所以我可以毫无问题地 source 脚本。我只是不确定一旦我找到了它该怎么做。

有什么想法吗?

您可以先通过 sed 运行 脚本将 run.sh 替换为您想要的任何内容,然后 运行 sed 输出作为测试而不是原始输出。否则应该 100% 相同。

cannot export aliases to scripts。如果你有 root 权限,你可以创建一个绑定:

$ mkdir replacement
$ ln -s /usr/bin/echo replacement/run.sh
$ sudo mount --bind replacement /some/really/long/path/name/for/this/executable/

绑定会将一个目录替换为另一个目录,类似于符号link,但在使用

卸载替换后,原始目录将保持不变
$ sudo umount /some/really/long/path/name/for/this/executable/

不管怎样,为什么不将这两个脚本复制到您的主目录并在本地修改它们呢?