ori*_*zil 5 macos bash command path which
这是一种困扰我的狂热怪异.
我在OSX上.
我安装了android SDK,因此该adb工具位于我的主目录中的一个文件夹中.该文件夹出现在我的路径中,由envas 报告~/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/bash和which命令之间遇到了微妙的不兼容.
在我的系统(Linux Mint)上,该which命令实际上是一个shell脚本,而不是内置命令,它的第一行是#! /bin/sh.这意味着它使用变量/bin/sh的处理$PATH.
这可能会有所不同,具体取决于/bin/sh设置方式(它有时是符号链接/bin/bash),但是一些实验表明bash处理文字~字符$PATH就好像它是主目录的完整路径,但却/bin/sh没有.既然你有
~/Development/android_sdk_latest/platform-tools
Run Code Online (Sandbox Code Playgroud)
作为您的元素之一$PATH,bash(您的交互式shell)可以找到adb命令,但sh(使用的shell which)不能.
在某些系统上,显然包括您的OSX系统,which是一个二进制可执行文件.同样,因为它不是一个bash脚本,所以它不会与bash的处理相匹配$PATH.
我建议进行两项更改.
首先,不要把文字~放在你的文字中$PATH.例如,要将platform-tools目录附加到您的目录$PATH,而不是:
export PATH="$PATH:~/Development/android_sdk_latest/platform-tools" # BAD!
Run Code Online (Sandbox Code Playgroud)
做这个:
export PATH="$PATH:$HOME/Development/android_sdk_latest/platform-tools"
Run Code Online (Sandbox Code Playgroud)
在$HOME将扩大到路径到您的主目录.export不会在双引号字符串中展开.
其次,不是使用$PATH命令,而是使用~内置的命令which.type将遵循当前shell的规则而不是那些规则bash,并且它将能够报告type无法查看的shell函数和别名.它有几个有用的命令行选项; /bin/sh在bash提示符下键入以获取详细信息.
bash shell中对which字符的处理help type记录在bash手册的Tilde Expansion部分中.
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |