"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 修复了它。
我正在尝试编写一个小脚本来列出给定变量的目录。
但是,在将我的输入读入变量 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 修复了它。