我试图创建一个监视 /media/user 目录的脚本。当新的 USB 插入时,脚本将运行并将新目录添加到现在使用新 USB 驱动器的程序中。
例如:
for D in ls -l /media/user
do
directory add -d D
done
目前,该脚本只是字面上添加了/media/user/D
与目录中的目录相同的次数,而/media/user
不是特定的目录名称/media/user/D
该命令directory add -d
添加目录,我希望它添加/media/user/drive1
等/media/user/drive2
谢谢,我显然是新人!
答案1
这是非常基本的 bash 内容。让我们看一下您的脚本。
for D in ls /l /media/user
do
您使用变量 D 创建一个 for 循环,该循环遍历
ls
/l
/media/user
所以,它会执行3次。
directory add -d D
我不知道该程序directory
应该做什么;我不知道。然而,它以完全相同的方式执行 3 次,并使用相同的参数:
add
-d
D
done
for 循环结束。
这并不完全是您所描述的行为;它总是会恰好加 3 倍D
。
现在进行改进。
您不想恰好运行 3 次,但希望对/media/user
.因此,一个明显的选择是使用$(ls -l /media/user)
.现在,我不知道你的directory
程序期望什么样的格式作为参数,但如果不是
-rw-r--r-- 1 ljm users 27164672 Jun 19 00:30 mikrotik-6.47.10.iso
那么您可能不想要该-l
选项。另外,解析 的输出ls
通常是一个坏主意。所以,您可能正在寻找的是
for D in /media/user/*
do
接下来 id 你的directory
程序。它总是D
作为最后一个参数被调用。不是价值D
,那就是$D
。这意味着您可能想要
directory add -d $D
但是,如果目录名称中包含空格,则会将目录名称拆分为两个参数。所以需要引用:
directory add -d "$D"
希望这能让你更好地走上正轨。
答案2
不要
ls
在脚本中使用。没有“目录”命令;
mkdir
不过,会创建目录。您可以阅读其“手册”页。
所以尝试将第一行替换为for D in /media/user/*