如何在脚本中处理分区确认请求

4

我想知道是否有人做过这样的事情:

我需要在一个脚本中使用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
@muru 是的,使用 -s 选项会将确认请求打印到标准输出并使命令失败。 - Thomas
你找到方法了吗?正在寻找中。 - Alex
2个回答

5

在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 - Alex

2
另一种不需要 EOF 的方法是存在的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接