小编use*_*912的帖子

为什么通过“sh *.sh”函数运行的脚本与“./*.sh”不同?

我正在使用 Ubuntu 15.10。我注意到一个奇怪的问题。

rsync使用--exclude={}选项运行嵌入在 shell 脚本中的命令(以 root 身份)时,rsync工作并排除路径,因为当我以 root 身份启动它时

./rBackup.sh
Run Code Online (Sandbox Code Playgroud)

但是,当我通过 root 运行它时

sh rBackup.sh
Run Code Online (Sandbox Code Playgroud)

exclude 目录选项不会延续,并且在备份它正在备份的驱动器时无限循环 in /media/。为什么?

编辑 - 这不是 sh / bash 差异 - 或者不应该。我有 #!/bin/bash 作为第一行,所以当通过“sh *.sh”运行时,它应该使用 bash 解释器 - 至少在理论上。

脚本如下:

#!/bin/bash

StandbyMount="/media/astump/sdb2"
mount /dev/sdb2 $StandbyMount
rsync -aAXv --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/etc/fstab,/boot/grub/grub.cfg} --delete-before / $StandbyMount
umount $StandbyMount
rm -fr $StandbyMount
Run Code Online (Sandbox Code Playgroud)

command-line bash

2
推荐指数
1
解决办法
1297
查看次数

标签 统计

bash ×1

command-line ×1