"ls: not found" 在 运行 "read PATH" 之后

"ls: not found" after running "read PATH"

我正在尝试编写一个小脚本来列出给定变量的目录。 但是,在将我的输入读入变量 PATH.

后,我根本无法 运行 ls
#!/system/bin/sh 
echo "enter directory for listing"
read "PATH"

ls "$PATH" -R > list.txt

退出时:

ls: not found

...并且不向 list.txt.

写入任何内容

变量名 PATH 已被保留用于不同的目的:它列出了搜索的所有可能位置以查找 shell.

中未内置的命令

ls就是这样一个命令。因此,当您更改 PATH 的值时,您会更改 shell 尝试查找 ls 可执行文件的方式;除非 PATH 的新值包含一个包含 ls 可执行文件的目录,否则任何进一步尝试 运行 ls(或未内置到 [=35= 中的其他命令) ]) 将失败。

相反,使用不同的变量名——理想情况下,至少包括一个小写字符,以避免与(全部大写的)内置变量和环境变量发生冲突。


因此,一种更正的形式可能是:

#!/system/bin/sh 
echo "enter directory for listing"
IFS= read -r path

ls -R -- "$path" > list.txt

请注意,在这种情况下,-R 移到了 "$path" 之前——虽然 GNU 系统允许可选参数位于位置参数之后,但许多较旧的 UNIX 系统只会处理标志(如-R) 如果在第一个 non-flag/option 参数 之前 找到它们,则它们是有效的。

我通过重置 iTerm 2 修复了它。