Shell-Script

GNU 在腳本中分開 resizepart

  • November 17, 2021

我想使用該yes命令,以便 GNU parted 不等待使用者輸入:

root@195-xxx-xxx-xxx:/proc# parted /dev/sda unit B resizepart 2 1166016512B
Warning: Shrinking a partition can cause data loss, are you sure you want 
to continue?
Yes/No? y                                                                 
Information: You may need to update /etc/fstab.
root@195-xxx-xxx-xxx:/proc# echo $?
0

但是yes在這裡使用不起作用:

root@195-xxx-xxx-xxx:/proc# yes | parted /dev/sda unit B resizepart 2 166016512B
Warning: Shrinking a partition can cause data loss, are you sure you 
want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1

編輯:

--script選項也不起作用:

root@195-xxx-xxx-xxx:/proc# parted --script /dev/sda unit B resizepart 2 1166016512B
Warning: Shrinking a partition can cause data loss, are you sure you 
want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1

如果resizepart不起作用,您可能不得不求助於rmmkpart實現相同的目標。

當然,這需要您首先解析分區表以確定分區類型和起始偏移量。除非您已經知道必要的值。畢竟你也必須166016512B從某個地方得到。

parted可以--machine選擇生成易於解析的輸出。另一方面,實際解析它的例子並不容易找到。;)

就我而言,我在無 tty 的 SSH 會話中使用 Parted 3.2。“是”命令破解不起作用,因為分開的程式碼具有以下測試:

   /* script-mode: don't handle the exception */
   if (opt_script_mode || (!isatty (0) && !pretend_input_tty))
           return PED_EXCEPTION_UNHANDLED;

請注意,‘isatty’ 測試將失敗。“pretend_input_tty”是一個未記錄的命令行選項,可以通過 —pretend-input-tty 打開。

所以,如果你想從腳本中使用 parted,我的回答如下:

/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 Yes 522239s

如果這不起作用,請嘗試移動Yes到最後:

/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 522239s Yes

請注意假裝輸入 tty 前面的三個破折號。我認為這應該把我們嚇跑。不過不確定。

引用自:https://unix.stackexchange.com/questions/190317