【发布时间】:2021-03-07 12:51:26
【问题描述】:
在我的 ~/.zshrc 文件中找到了函数,它打印 command not found: adb
install_apk_on_device() {
set -x
local device=${1}
local path=${2}
if [[ -z "${device}" ]]; then
echo "The device is empty"
elif [[ -z "${path}" ]]; then
echo "The path is empty"
else
adb -s "$device" install -r "$path"
fi
}
output:
+install_apk_on_device:3> local device=emulator-5554
+install_apk_on_device:4> local path=MY_APK_PATH
+install_apk_on_device:6> [[ -z emulator-5554 ]]
+install_apk_on_device:8> [[ -z MY_APK_PATH ]]
+install_apk_on_device:11> adb -s emulator-5554 install -r MY_APK_PATH
install_apk_on_device:11: command not found: adb
但是,如果您使用相同的参数直接运行此 adb 命令,例如 adb -s 52036d8b50671495 install -r .//androidApp/build/outputs/apk/debug/androidApp-debug.apk,则会安装 apk
另外,如果我将 adb 命令从 else-branch 中取出到函数的请求处,它会按预期工作
install_apk_on_device() {
adb -s "$1" install -r "$2"
local device=${1}
local path=${2}
if [[ -z "${device}" ]]; then
echo "The device is empty"
elif [[ -z "${path}" ]]; then
echo "The path is empty"
fi
}
这些是我的路径:
PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
export PATH
export HOME=/Users/ruanvd5
export JAVA_HOME=$HOME/Library/Java/JavaVirtualMachines/corretto-1.8.0_275/Contents/Home
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$HOME/Programming/elixirSourceCode/elixir/bin
export GRADLE_USER_HOME=$HOME/.gradle
另外,这是我的declare -p PATH
export -T PATH path=(
/bin /usr/bin /usr/local/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/munki /Library/Apple/usr/bin
/Users/ruanvd5/Library/Android/sdk/emulator
/Users/ruanvd5/Library/Android/sdk/tools
/Users/ruanvd5/Library/Android/sdk/tools/bin
/Users/ruanvd5/Library/Android/sdk/platform-tools
/Users/ruanvd5/Programming/elixirSourceCode/elixir/bin
)
混淆了我写错了:-)
【问题讨论】:
-
将
"adb -s ${device} install -r ${path}"全部放在引号中在命令行上也不起作用。当您以adb -s "$device" install -r "$path"运行它时,它可以工作,但引号围绕单个参数(以阻止它们本身被拆分为多个参数),而不是整个命令(需要被拆分为多个论据)。 -
(请注意,
${device}和$device在这种情况下彼此没有优势;而将其设为"${device}"或"$device"时,正确性会明显提高——双引号禁止字符串拆分和通配符;大括号仅在您参数化扩展或连接到具有相邻字符的字符串时才起作用,否则这些字符可能作为变量名的一部分有效)。 -
尝试运行不带引号的函数,例如:adb -s "$device" install -r "$path"。然后终端说
command not found: adb,但是我的~/.zshrc 中有路径。所以它仍然不起作用:-( -
让我更困惑的是
reconnect() { adb kill-server && adb start-server }这个函数完美运行???? -
为什么会让人困惑?
reconnect() { adb kill-server && adb start-server; }预计是完美的。至于为什么adb -s "$device" install -r "$path"不起作用,我们需要检查您的PATH在工作情况和损坏情况下的情况,以了解它们之间的不同之处。