我只想打印特定目录的文件名: 这样就可以了:
ls -g --sort=size -r /bin | awk '{print $8,$9,$10,$11,$12,$13}'
但如果我读了路径变量,它就不起作用了:
read PATH
ls -g --sort=size -r $(PATH) | awk '{print $8,$9,$10,$11,$12,$13}'
Command 'awk' is available in '/usr/bin/awk'
答案 0 :(得分:4)
应该是:
ls -g --sort=size -r ${PATH} | awk '{print $8,$9,$10,$11,$12,$13}'
注意花括号。
使用$(..)
,它将执行名为PATH
的命令/函数并替换结果,这不是您想要的。
请注意,PATH
是变量名称的不良选择,因为它将覆盖具有相同名称的系统变量并使系统命令不可用(因为原始PATH
现在已经消失)。我建议您使用其他名称,例如my_path
:
read my_path
ls -g --sort=size -r ${my_path} | awk '{print $8,$9,$10,$11,$12,$13}'
答案 1 :(得分:3)
这正是您不应该使用UPPER_CASE_VARS的原因。 $ PATH是variable used by the shell,用于查找系统上的可执行文件。只要您使用用户输入覆盖它,您的脚本就无法再找到任何输入中没有的内容。在这种情况下,您输入了/bin
,因此您的脚本可以找到/bin/ls
,但awk
不存在。
command_not_found_handle
(请参阅/etc/bash.bashrc)介入给你一个建议。