我怎么能欺骗bash认为我从二进制文件所在的目录中运行了一个脚本?

时间:2017-03-09 21:11:25

标签: bash command-line terminal path android-sdk-tools

我有一个经常使用的二进制文件(来自emulator的{​​{1}})。我已将其添加到我的Android SDK Tools变量中,以便我可以轻松地仅使用$PATH运行命令。

然而,事实证明二进制文件使用相对路径;如果我从不同的目录运行脚本,它会抱怨。我真的很想从任何文件夹运行命令而不必emulator进入二进制文件所在的目录。有没有办法让脚本/ bash认为我从它所在的目录运行命令?

3 个答案:

答案 0 :(得分:2)

功能是适合工作的工具:

emu() ( cd /dir/with/emulator && exec ./emulator "$@" )

让我们把它分解成碎片:

  • 使用函数而不是别名允许在任意位置替换参数,而不是仅在别名定义的字符串末尾。在这种情况下,这是至关重要的,因为我们希望在内部子shell中对参数进行评估,如下所述:
  • 使用括号而不是大括号,会导致此函数的主体在子shell中运行;确保cd仅对该子shell生效,并且不会影响父级。
  • 使用&&连接cd和以下命令可确保在cd失败时正确中止。
  • 使用exec告诉子shell使用模拟器在内存中替换它自己,而不是只有一个额外的shell,只是等待模拟器退出。
  • "$@"扩展为传递给函数的参数列表。

答案 1 :(得分:1)

在〜/ .bashrc中添加别名(emu):

alias emu="(cd /dir/with/emulator; ./emulator)"

答案 2 :(得分:0)

我会查看命令行别名。

如果你在linux中并使用bash,你可以去〜/ .bash_profile并添加一行如下:

alias emulator='./path-to-binary/emulator"

在Windows上它有点不同。 Here是一个关于如何在Windows中执行类似操作的示例。