【问题标题】:Create bash script menu with labels创建带有标签的 bash 脚本菜单
【发布时间】:2022-01-03 14:12:11
【问题描述】:

我想创建一个 bash 脚本,这样我就可以选择一个可以使用 mosh 连接的服务器。 目前我有这个小脚本,它显示了服务器的用户名和 ip。 很难记住哪个服务器做了什么,所以我想在 ip 上添加一些注释。

我怎样才能修改它,使它还显示菜单条目的标签或备注,以便我更容易识别服务器。

目前看起来是这样的:

#!/bin/bash

PS3='Pick a server (or ctrl-c to quit): '
select item in \
"username@someip" \
"username@someip" \
"username@someip" \
"username@someip" \
"username@someip" \
"username@someip"
do
               mosh $item
exit 0
done

创建以下菜单:

1) username@someip  3) username@someip  5) username@someip
2) username@someip  4) username@someip  6) username@someip

如何修改此脚本,使其创建以下菜单:

1) username@someip (some remark) 3) username@someip (some remark)   5) username@someip (some remark)
2) username@someip (some remark) 4) username@someip (some remark)   6) username@someip (some remark)

【问题讨论】:

  • ?? "username@someip (some remark)" \ "username@someip (some remark)" \ ?
  • 这不起作用,因为它会导致'mosh username@someip (some remark)'
  • 那么:不要使用select和编写自己的打印和阅读功能,或者从$item中过滤(some remark)

标签: bash shell


【解决方案1】:

学习(参数扩展规则)[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html]

#!/bin/bash
PS3='Pick a server (or ctrl-c to quit): '
select item in "u1@ip1 (foo)" "u1@ip2 (bar)" "u2@ip1 (baz)" "u2@ip2 (foo bar)" 
do mosh "${item%% *}" # strips the unwanted part
done

【讨论】: