【问题标题】:how do I get over parted confirmation request in a script我如何在脚本中解决分开的确认请求
【发布时间】:2018-09-26 03:47:57
【问题描述】:

不知道有没有人做过这样的事情:

我需要在脚本中使用 parted 来做一些不可靠的操作。我正在尝试修改包含已启动分区的扩展分区,因此我收到了一个确认请求,导致脚本模式下错误退出。

当我手动执行此操作时,它可以工作。

所以我尝试将我的输入通过管道传输到 parted 以使用以下脚本解决此问题:

#!/usr/bin/env bash
parted /dev/sda << EOT
resizepart
4
y
33593343s
Yes
I
EOT

不幸的是,这不起作用。我明白了

root@19912ac:/tmp# ./test.sh 
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resizepart                                                       
Partition number? 4                                                       
Warning: Partition /dev/sda4 is being used. Are you sure you want to continue?
(parted) y                                                              
  align-check TYPE N                     
help [COMMAND]                           print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END     make a partition
name NUMBER NAME                         name partition NUMBER as NAME
print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
quit                                     exit program
rescue START END                         rescue a lost partition near START and END
resizepart NUMBER END                    resize partition NUMBER
rm NUMBER                                delete partition NUMBER
...

在我被要求确认 /dev/sda4 的修改之前,看起来一切顺利。我的下一个输入 (y) 显示在命令行上,但之后我只能获得帮助信息。

以前有人试过吗?

【问题讨论】:

  • 您尝试过-s 选项吗? "-s, --script 从不提示用户干预"
  • @muru 是的,使用 -s 将确认请求打印到标准输出并且命令失败。
  • 你找到方法了吗?正在寻找它。

标签: bash parted


【解决方案1】:

parted ---pretend-input-tty 有一个隐藏标志(我猜--- 是为了表明它是用于高级用途的!)。我发现在类似于你的脚本中使用它是可行的:

脚本

#!/bin/bash

echo "Resizing partition ${2} on ${1} with new end ${3}"

parted "${1}" ---pretend-input-tty <<EOF
resizepart
${2}
${3}
Yes
quit
EOF

echo "Done"

【讨论】:

  • 为什么这没有记录在案!谢谢@benp44
【解决方案2】:

存在另一种没有 EOF 的方式:

echo -e "resizepart\n1\nYes\n100%\nprint free\nquit" | sudo parted /dev/vda ---pretend-input-tty

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2020-02-02
    • 2020-12-13
    • 2019-04-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多