子shell中使用的“basename”返回“command not found”

mle*_*les 3 bash subshell

运行此脚本时:

#!/bin/sh -ex

if [[ $# -ne 1 ]]; then
  echo "./import-public-ssh-key.sh <absolute path to public key>"
  exit 1;
fi

PATH=$1
KEY=$(basename ${PATH})
Run Code Online (Sandbox Code Playgroud)

我得到:

./import-public-ssh-key.sh: line 9: basename: command not found
Run Code Online (Sandbox Code Playgroud)

没有子shell的basename作品:

$ basename /Users/mles/.ssh/id_rsa.pub
id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

为什么basename不在子shell中工作?如果这是相关的,我在 mac 上。

Wil*_*ell 5

您重置了 PATH。不要那样做。shell 搜索 PATH 中列出的所有目录,并且您已对其进行了更改,以便 PATH 不再包含包含 basename 的目录。