"Command not found" 当 adb 是 运行 来自一个函数时,否则不是
"Command not found" when adb is run from a function but not otherwise
在我的 ~/.zshrc 文件中找到函数,它打印 command not found: adb
install_apk_on_device() {
set -x
local device=
local path=
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 将被安装
此外,如果我从函数开始处的 else 分支中取出 adb 命令,它会按预期工作
install_apk_on_device() {
adb -s "" install -r ""
local device=
local path=
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
)
混淆我写错了:-)
尝试引用作业
local device=""
local path=""
与 bash(和其他 POSIX 兼容的 shells 不同;这是 zsh 违反规范的地方,因为 the standard specifies 只有全大写名称在用于环境变量的名称空间中——也是用于常规shell变量的名称空间——应该对POSIX指定的工具有意义), name path
对 zsh 有意义,即使是小写。更改您的变量名称。
也就是说,而不是 local path=
(在 zsh 中,改变活动 PATH
作为副作用),使其成为 local apk_path=
.
install_apk_on_device() {
local device apk_path
device=; apk_path=
[[ -z $device ]] && { echo "The device is empty" >&2; return 1; }
[[ -z $apk_path ]] && { echo "The path is empty" >&2; return 1; }
adb -s "$device" install -r "$apk_path"
}
在我的 ~/.zshrc 文件中找到函数,它打印 command not found: adb
install_apk_on_device() {
set -x
local device=
local path=
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 将被安装
此外,如果我从函数开始处的 else 分支中取出 adb 命令,它会按预期工作
install_apk_on_device() {
adb -s "" install -r ""
local device=
local path=
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
)
混淆我写错了:-)
尝试引用作业
local device=""
local path=""
与 bash(和其他 POSIX 兼容的 shells 不同;这是 zsh 违反规范的地方,因为 the standard specifies 只有全大写名称在用于环境变量的名称空间中——也是用于常规shell变量的名称空间——应该对POSIX指定的工具有意义), name path
对 zsh 有意义,即使是小写。更改您的变量名称。
也就是说,而不是 local path=
(在 zsh 中,改变活动 PATH
作为副作用),使其成为 local apk_path=
.
install_apk_on_device() {
local device apk_path
device=; apk_path=
[[ -z $device ]] && { echo "The device is empty" >&2; return 1; }
[[ -z $apk_path ]] && { echo "The path is empty" >&2; return 1; }
adb -s "$device" install -r "$apk_path"
}