Bash脚本编写-循环直到返回值为0

charliehorse55

我需要在脚本中卸载某些内容,但有时需要先卸载所有数据,然后再完成卸载,这会导致umount失败。我正在寻找一种方法来进行“阻止”卸载,但是我什么也没找到。因此,我尝试编写一个脚本来循环直到可以将其卸载,但该脚本无法正常工作。

while [ `sudo umount mount` ]
do
    sleep 0.1
done
rmdir mount

运行时输出:

umount: /home/evantandersen/mount: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
rmdir: failed to remove `mount': Device or resource busy

它应该不循环直到返回值sudo umount mount0表示已成功卸载吗?

斯蒂芬·查泽拉斯(Stephane Chazelas)

[命令用于评估条件表达式。这里没有用。

由于umount在标准输出上不输出任何内容(错误归于stderr),因此`sudo umount mount`扩展为空。

就像这样:

while [ ]
do
  sleep 0.1
done

[命令时没有通过任何参数旁边[,并]返回(非零退出状态),这样你就不会进入循环。

即使umount在stdout上输出了错误,使用该[命令也没有任何意义,因为由该输出产生的单词永远不会构成有效的条件表达式。

您要在这里:

until sudo umount mount
do
  sleep 0.1
done

也就是说,您要检查sudo / umount而不是[命令的退出状态

如果要检查umount在stderr上是否输出任何错误或警告,那[可能是有用的地方。-n "some-string"是通过所识别的条件表达式[命令测试是否"some-string"是空的或没有,所以这样的:

while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
  sleep 0.1
done

但是寻找错误或警告消息通常不是一个好主意。umount命令告诉我们它是否以退出代码成功执行,这要可靠得多。它可能会成功,但仍会输出一些警告消息。它可能会失败,并且不会输出错误(例如被杀死时)。

在这种特殊情况下,请注意,umount由于未装入目录,这可能会失败,并且在这种情况下您将永远循环,因此您可以尝试另一种方法,例如:

while mountpoint -q mount && ! sudo umount mount; do
  sleep 0.1
done

或者,如果“ mount”可能已经安装了几次,而您想全部卸载它们:

while mountpoint -q mount; do
  sudo umount mount || sleep 0.1
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为简单的bash脚本编写简单的GUI

来自分类Dev

在 linux 中编写 bash shell 脚本时使用 for 循环

来自分类Dev

bash脚本中的返回值错误

来自分类Dev

Bash脚本返回值和回声

来自分类Dev

在bash shell脚本中,编写一个遍历字符串值的for循环

来自分类Dev

在bash shell脚本中,如何编写经过三个值的循环

来自分类Dev

Sh循环命令,直到返回值= 0

来自分类Dev

在循环中获取函数的返回值 - shell 脚本

来自分类Dev

同时为2个文件夹编写Linux bash脚本

来自分类Dev

如何编写bash脚本,使用户可以选择MIRROR环境变量的值?

来自分类Dev

如何从bash脚本调用perl子获得返回值?

来自分类Dev

编写无限bash循环

来自分类Dev

文件夹中最旧文件的Linux bash脚本+如果文件夹为空则返回值

来自分类Dev

Bash Shell脚本:虽然apt-get update失败,但退出状态为0,利用退出状态编写自动更新脚本

来自分类Dev

从Perl脚本返回值

来自分类Dev

为测试外壳的脚本编写脚本

来自分类Dev

无法编写Bash脚本来检查目录是否为空,如果目录为空则将其删除

来自分类Dev

Bash脚本编写,获取用户输入并在ifcfg-enp0s3.conf中更改IPADDR0

来自分类Dev

在我的bash脚本中,如何编写仅在“ tail”的输出不包含字符串时才退出的while循环?

来自分类Dev

尝试编写返回下一个可用端口号的bash脚本,我在做错什么?

来自分类Dev

在Ubuntu上编写bash脚本以按列将数字文本文件读取为数组

来自分类Dev

Bash脚本-初始化脚本中的'type'返回值不同

来自分类Dev

从bash函数返回值

来自分类Dev

如何使用Bash命令的返回值(例如“ ifconfig”)用作Bash脚本中if语句的参数

来自分类Dev

编写使用sudo的bash脚本

来自分类Dev

如何在批处理文件脚本中循环打印程序的返回值?

来自分类Dev

bash脚本中的for循环

来自分类Dev

挂bash循环脚本?

来自分类Dev

bash脚本-循环功能

Related 相关文章

  1. 1

    为简单的bash脚本编写简单的GUI

  2. 2

    在 linux 中编写 bash shell 脚本时使用 for 循环

  3. 3

    bash脚本中的返回值错误

  4. 4

    Bash脚本返回值和回声

  5. 5

    在bash shell脚本中,编写一个遍历字符串值的for循环

  6. 6

    在bash shell脚本中,如何编写经过三个值的循环

  7. 7

    Sh循环命令,直到返回值= 0

  8. 8

    在循环中获取函数的返回值 - shell 脚本

  9. 9

    同时为2个文件夹编写Linux bash脚本

  10. 10

    如何编写bash脚本,使用户可以选择MIRROR环境变量的值?

  11. 11

    如何从bash脚本调用perl子获得返回值?

  12. 12

    编写无限bash循环

  13. 13

    文件夹中最旧文件的Linux bash脚本+如果文件夹为空则返回值

  14. 14

    Bash Shell脚本:虽然apt-get update失败,但退出状态为0,利用退出状态编写自动更新脚本

  15. 15

    从Perl脚本返回值

  16. 16

    为测试外壳的脚本编写脚本

  17. 17

    无法编写Bash脚本来检查目录是否为空,如果目录为空则将其删除

  18. 18

    Bash脚本编写,获取用户输入并在ifcfg-enp0s3.conf中更改IPADDR0

  19. 19

    在我的bash脚本中,如何编写仅在“ tail”的输出不包含字符串时才退出的while循环?

  20. 20

    尝试编写返回下一个可用端口号的bash脚本,我在做错什么?

  21. 21

    在Ubuntu上编写bash脚本以按列将数字文本文件读取为数组

  22. 22

    Bash脚本-初始化脚本中的'type'返回值不同

  23. 23

    从bash函数返回值

  24. 24

    如何使用Bash命令的返回值(例如“ ifconfig”)用作Bash脚本中if语句的参数

  25. 25

    编写使用sudo的bash脚本

  26. 26

    如何在批处理文件脚本中循环打印程序的返回值?

  27. 27

    bash脚本中的for循环

  28. 28

    挂bash循环脚本?

  29. 29

    bash脚本-循环功能

热门标签

归档