Linux

在 Linux Bash 中暫停 WinCMD 樣式的規範方法是什麼?

  • January 25, 2021

Windows Batch/CMD 中,要暫停腳本的執行,您可以使用

echo "This is before pause."
pause
echo "The key was pressed, continuing..."

使用像say這樣的標準終端將如何實現這一點bash(但zsh或其他人也應該充其量工作)?我當然可以編寫一個簡單的C應用程序,但我不敢相信,沒有規範的方法 -sleep不是我正在尋找的。

我使用read找到了這些直接的方法:

  • read -p "Press [Enter] key to start backup..."
  • read -p "Press any key to resume ..."
  • read -s -n 1 -p "Press any key to continue . . ." 在函式內部

但他們給我XXX.sh: 4: read: arg count前兩個或3: read: Illegal option -n分別。我正在使用 bash 4.4.19(1)-release

read您的命令不起作用的主要原因是它們用於bash但您正在使用sh.

引用的文章說,

在類 Unix 作業系統上,read是 shell 的內置bash命令

它也是許多其他 shell 中的內置命令,包括sh您正在使用的 shell,但readin的語法sh要少得多。

#!/bin/bash
...
read -p "Press [Enter] key to continue: "
...

請記住使文件可執行,然後將其作為程序執行

# Assume the script is called "demo"
chmod a+x demo
./demo

在普通的 sh 中,沒有簡單的方法來等待單次按鍵。要求使用者按 更容易Enter,因為有一種簡單的方法可以等待使用者輸入一行。

read內置命令讀取一行。您需要給它一個變數的名稱來儲存該行的內容,即使您不打算使用它。

echo "Press Enter to continue."
read -r line
echo "Continuing."

如果您的腳本以或等效開頭#!/usr/bin/env bash,則有其他選項可以讓它等待單次按鍵。我認為不值得為此煩惱,並教您的使用者哪些鍵可以或不可以算作“任何鍵”。#!/usr/bin/env zsh``read

請注意,在類 Unix 系統上,在無人值守且沒有終端的情況下執行腳本是很常見的。典型的伺服器大部分時間都沒有人登錄控制台。所以要求使用者確認某事是非常少見的。

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