" ls:未找到"跑完"读PATH"

时间:2015-02-03 23:14:35

标签: shell scripting sh

我试图编写一个小脚本来列出给定变量的目录。 但是,在阅读我对变量ls的输入后,我根本无法运行PATH

#!/system/bin/sh 
echo "enter directory for listing"
read "PATH"

ls "$PATH" -R > list.txt

退出时:

ls: not found

...并且不向list.txt写任何内容。

2 个答案:

答案 0 :(得分:6)

变量名PATH已经被保留用于不同的目的:它列出了搜索的所有可能位置,以查找未内置到shell中的命令。

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

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


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

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

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

请注意,在这种情况下,-R"$path"之前移动 - 而GNU系统将允许可选参数位于位置参数之后,许多旧的UNIX系统只会处理标志(如{{ 1}})如果他们在第一个非标志/选项参数之前找到,则有效。

答案 1 :(得分:-1)

我通过重置iTerm 2来修复它。 enter image description here