Shell 在脚本中运行命令时找不到文件,但在单独运行命令时找不到文件?

Shell 在脚本中运行命令时找不到文件,但在单独运行命令时找不到文件?,shell,Shell,我有一个旧的FreeNAS实现,运行FreeBSD 9.x。 我需要运行一个非常简单的脚本: #!/bin/sh echo "$1" echo /tank1/validation/"$1" mount -t cd9660 /dev/cd0 /mnt/cdfn0 cp -R -n /mnt/cdfn0/* /tank1/validation/"$1" umount /mnt/cdfn0 chmod -R 777 /tank1/validation/"$1" camcontrol eject cd0

我有一个旧的FreeNAS实现,运行FreeBSD 9.x。 我需要运行一个非常简单的脚本:

#!/bin/sh
echo "$1"
echo /tank1/validation/"$1"
mount -t cd9660 /dev/cd0 /mnt/cdfn0
cp -R -n /mnt/cdfn0/* /tank1/validation/"$1"
umount /mnt/cdfn0
chmod -R 777 /tank1/validation/"$1"
camcontrol eject cd0
不幸的是,由于某些难以理解的原因,当shell执行时:

mount -t cd9660 /dev/cd0 /mnt/cdfn0
它抛出一个错误,因为找不到文件?(它找不到
cdfn0
),并且从不装入CD-rom。 然而,如果我手动(一个接一个)执行每一条该死的线路,它就可以工作了! WTF

知道怎么了吗

=======编辑

我使用的S1值不是开关,而是创建文件夹名称的任意文本。由于这个系统是一个旧的FreeNAS,它缺少“read”命令,因此这是我发现的将变量名传递给脚本的唯一方法。我必须将近400张CD和DVD迁移到FreeNAS系统中

当我使用-x参数运行脚本时,我得到:

freenas:/tank1# sh -x cd0iso.sh A005
+ echo A005
A005
+ echo /tank1/validation/A005
/tank1/validation/A005
+ mount -t cd9660 /dev/cd0 /mnt/cdfn0
: No such file or directory
+ cp -R -n '/mnt/cdfn0/*' /tank1/validation/A005
cp: /mnt/cdfn0/*: No such file or directory
+ umount /mnt/cdfn0
: statfs: No such file or directory
: unknown file system
+ chmod -R 777 /tank1/validation/A005
: No such file or directory05
+ camcontrol eject cd0
camcontrol: cam_get_device: unable to find device unit number
+
: not found
+
: not found
+
: not found
据我所知,失败的线路是挂载线路

至于chmod 777,是的,我知道,但该系统是在一个封闭的局域网上,被黑客攻击的可能性为零。这只会让我的生活更轻松


有什么想法吗?

这个问题是关于实施/系统管理的。这样的问题在体育课上是离题的(请阅读以更好地了解这里的适当问题)。我投了一票,希望把这个问题转移到更合适的堆栈溢出问题。您对
$1
使用什么值?当您使用-\$1的
sh-x yourscript.sh值运行它时会发生什么情况?在未找到
cdfn0
的情况下,哪一行出现故障?您应该避免使用777权限-它们对system.tx的安全性具有毁灭性的危险。请参阅上面的编辑以获取答案。哦,FYI,我可以将脚本剥离到装载行(没有要传递的参数),但它仍然失败。如果我一字不差地执行挂载行并手动执行,那么它就可以正常工作。仅供参考2:我以root用户身份登录,因此也没有权限问题。