会話スクリプトのコンピュータアーキテクチャ

会話スクリプトのコンピュータアーキテクチャ

私のコンピュータアーキテクチャを表示するダイアログボックスを持つプログラムを作成したいと思います。しかし、間違った出力があります。これは私のスクリプトです。

#!/bin/bash 
# ComputerArchitecture_interactive_dialog: an interactive dialog to see the ComputerArchitecture in a simple way.

DIALOG_CANCEL=1
DIALOG_ESC=255
HEIGHT=0
WIDTH=0

display_result() {
  dialog --title "$1" \
    --no-collapse \
    --msgbox "$result" 0 0
}

while true; do
  exec 3>&1
  selection=$(dialog \
    --backtitle "Computer Architecture list" \
    --title "ComputerArchitectuur" \
    --clear \
    --cancel-label "Exit" \
    --menu "Use [ENTER] to select:" $HEIGHT $WIDTH 4 \
    "1" "Information about Processors and Cores" \
    "2" "Information about RAM-memory" \
    "3" "Information about connected drives and USB-devices" \
    "4" "Inforamtion about the current load" \ 
    2>&1 1>&3)
  exit_status=$?
  exec 3>&-
  case $exit_status in
    $DIALOG_CANCEL)
      clear
      echo "Program stopped."
      exit
      ;;
    $DIALOG_ESC)
      clear
      echo "Program closed." >&2
  exit 1
  ;;
  esac
  case $selection in
    0 )
      clear
      echo "Program stopped."
      ;;
    1 )
      result=$(echo "Processors and Cores"; lscpu)
      display_result "Processors and Cores"
      ;;
    2 )
      result=$(echo "RAM"; dmicode --type 17)
      display_result "RAM"
      ;;
    3 )
     result=$(echo "Connected drives and USB-devices";lsblk \lsusb)
     display_result "Connected drives and USB-devices"
     ;;
   4 )
     result=$(echo "Current load"; top)
     display_result "Current load"
     ;;
 esac
done

これは無効な出力です。

Error: Expected 2 arguments, found only 1. 
Use --help to list options. 

ベストアンサー1

プロセス置換を二重引用符で囲む必要があります。それらすべて。また、変数(すべての変数 - $ selection、$ HEIGHT、$ WIDTH、$ DIALOG_CANCEL、$ DIALOG_ESCなどの変数)を使用するときは、二重引用符を使用する必要があります。

たとえば、次のようにしないでください。

result=$(echo "Processors and Cores"; lscpu)

これを行う:

result="$(echo "Processors and Cores"; lscpu)"

そしてこれをしないでください:

case $selection in

これを行う:

case "$selection" in

より良い方法は、display_resultグローバル変数()に依存しないように関数を書き換えることです$result

たとえば、

display_result() {
  # This version of display_result takes multiple args.
  # The first is the title.  The rest are displayed in the 
  # message box, with a newline between each arg.
  # To insert a blank line use an empty string '' between any two args.
  title="$1" ; shift

  dialog --title "$title" \
    --no-collapse \
    --msgbox "$(printf "%s\n" "$@")" 0 0
}

次に、ケースの説明で次のように使用します。

...
case "$selection" in
  1) display_result 'Processors and Cores' "$(lscpu)" ;;
  2) display_result 'RAM' "$(dmicode --type 17)" ;;
  ...
esac

おすすめ記事