bash:“which adb”不返回任何内容,但“command -v adb”返回我期望的内容

2023-12-31

这是一个一直困扰着我的 bash 怪事。

我在 OSX 上。

我已经安装了android SDK,结果是adb工具位于我的主目录中的一个文件夹中。该文件夹出现在我的路径中,如报告所述env as ~/Development/android_sdk_latest/platform-tools.

adb本身运行得很好,但是当我这样做时which adb结果是空的。如果我做command -v adb,结果是完整路径,如预期:/Users/me/Development/android_sdk_latest/platform-tools/adb

adb没有出现在我的别名中。

bash 路径有何微妙之处?which我是在黑暗中吗?


你遇到了两者之间微妙的不兼容/bin/bashwhich命令。

在我的系统(Linux Mint)上,which命令实际上是一个shell脚本,而不是内置命令,它的第一行是#! /bin/sh。这意味着它使用/bin/sh的处理$PATH多变的。

这可能会因方式而异/bin/sh已设置(有时是一个符号链接/bin/bash),但一点实验表明bash处理文字~中的人物$PATH就好像它是您的主目录的完整路径,但是/bin/sh才不是。既然你有

~/Development/android_sdk_latest/platform-tools

作为你的元素之一$PATH, bash(你的交互式 shell)可以找到adb命令,但是sh(使用的外壳which) 不能。

在某些系统上,显然包括您的 OSX 系统,which是一个二进制可执行文件。再次强调,由于它不是 bash 脚本,因此它不会与 bash 的处理方式相匹配$PATH.

我建议进行两项更改。

首先,不要输入文字~在你的$PATH。例如,要附加platform-tools目录到你的$PATH,而不是这个:

export PATH="$PATH:~/Development/android_sdk_latest/platform-tools" # BAD!

do this:

export PATH="$PATH:$HOME/Development/android_sdk_latest/platform-tools"

The $HOME将扩展到您的主目录的路径(当您运行export命令,而不是当您使用$PATH之后)。~不在双引号字符串内扩展。

其次,而不是使用which命令,使用type内置命令bash. type将遵循您当前 shell 的规则,而不是/bin/sh,并且它将能够报告 shell 函数和别名which是无法看到的。它有几个有用的命令行选项;类型help type在 bash 提示符下了解详细信息。

bash shell 处理~中的字符$PATH记录在bash手册 https://www.gnu.org/software/bash/manual/的部分波形符扩展 https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash:“which adb”不返回任何内容,但“command -v adb”返回我期望的内容 的相关文章

  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 将二进制输出从文件输出重定向到 stdout

    我有一个专有的二进制文件 它顽固地接受两个文件作为参数 第一个作为输入 第二个作为输出 我想 构建第一个参数 不创建临时文件 使二进制写入标准输出而不是输出文件 第二个参数 我解决了第一个问题 lt 但不确定第二个参数 我编写了以下脚本 看
  • BASH:将数据从平面文件导入模板

    我有一个平面记录文件 每行有 33 行 我需要将此文件格式化为模板中的规格 模板为 DOS 格式 源文件为 NIX 格式 该模板具有必须遵守的特定缩进和间距 我想到了几个选择 BASH 与经典的 nix 工具 sed awk grep 等
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 如何让 mod_wsgi 在 Mac 上运行?

    几个小时以来 我一直在尝试在 Mac 上安装最新版本的 mod wsgi 3 3 我使用的是 Snow Leopard 并且有系统附带的 Apache Apache 2 2 15 和 Python 2 6 1 r261 67515 版本 我
  • Mac OS 上的诗歌安装失败,显示“should_use_symlinks”

    我正在尝试使用以下命令安装诗歌 curl sSL https install python poetry org python3 但它失败了 但有以下例外 例外 此版本的 python 无法在不使用符号链接的情况下创建 venvs 下面是详
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • sh / Bash shell 脚本中 !# (bang-pound) 的含义是什么?

    我想了解这个 Scala 脚本是如何工作的 usr bin env bash exec scala 0 object HelloWorld def main args Array String println Hello world arg
  • 将 stdout 和 stderr 重定向到带有前缀的单个文件

    我正在编写一个 bash 脚本 需要重定向stdout and stderr我运行到单个文件的命令的输出 在每行前面加上前缀stderr or stdout 因此 有没有一个简单的方法可以做到这一点 from Debian http www
  • Spyder 无法启动:spyder:找不到命令

    我已经安装了spyderpip3 install spyder在苹果电脑上 但是 当我无法从 bash 启动它时 它会显示spyder command not found 我已按照其说明进行操作Github页面 https github c
  • 在java中查找OSX的版本

    我需要测试 java 中 osx 的版本是否 Try System getProperty os name and or System getProperty os version 它返回字符串 HERE https docs oracle
  • NSView 鼠标跟踪

    我在 Mac OS X 上遇到了 Cocoa NSView 的奇怪行为 我在 NSView 容器中有一个自定义 NSView 这个自定义 NSView 跟踪鼠标移动 点击 并有一个工具提示 当我在所描述的视图上方添加 NSView 时 即使
  • 用等号完成命令选项

    我正在尝试为可能需要表单上的长选项的命令编写一个 Bash 完成脚本 option or param value 如果用户已经在命令行上输入了一个选项 则该选项应从完成列表中排除 假设仅在命令行上指定一次给定选项才有意义 这是第一次尝试 m
  • 如何使用存储在文本文件中的选项在 bash 中显示选择菜单? [复制]

    这个问题在这里已经有答案了 如何使用我存储在文本文件的各行中的选项为用户显示选择菜单 例如 我的文本文件 ingestion txt 如下所示 SOUP FTS CTS JDBC NEW 我希望用户看到这个 Please select an
  • 如何在不同目录中启动多个窗口的 tmux?

    我想使用脚本打开一个有 6 个窗口的 tmux 会话 每个窗口位于不同的目录中 我开始于我找到的一个脚本 http blog hawkhost com 2010 07 02 tmux E2 80 93 the terminal multip
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 在 OS X 上与 clang++ 链接会生成大量符号未找到错误

    我正在尝试使用 clang 编译器在 OS X 10 8 上编译一些 C 代码 包括 C 11 功能 我有一个生成目标文件的 makefile OK 然后在命令上 clang o Analysis so shared DataFile o
  • python sys.path 故障排除

    python 文档位于http docs python org library sys html http docs python org library sys html比如说sys path is 从环境变量 PYTHONPATH 以及
  • 如何检测脚本是否正在被获取

    我有一个脚本 我不希望它调用exit如果它正在被采购 我想检查一下是否 0 bash但是如果脚本源自另一个脚本 或者用户从不同的 shell 获取它 例如ksh 有没有可靠的方法来检测脚本是否来源 稳健的解决方案bash ksh zsh 包

随机推荐