脚本文件中的TMOUT不适用于select命令。如何解决?

格里高利

更新-看起来这是bash 4.3.42特有的功能,因为它在4.3.46下可以正常工作。将这些职位留给以后遇到相同问题的人员。

当我在bash命令行中运行此命令时,它可以正常工作:

% (TMOUT=3; s="no selection"; select s in a b c ; do break ; done; echo $s)
1) a
2) b
3) c
#?
no selection
% _

结果:不显示任何选择,然后返回命令行。

但是,当我将其放置为脚本并执行时,它会反复请求选择。

% cat a.sh
#!/bin/bash
(TMOUT=3; s="no selection"; select s in a b c ; do break ; done; echo $s)

% ./a.sh

结果:

1) a
2) b
3) c
#? 1) a
2) b
3) c
#? 1) a
2) b
3) c
#? ^C
% _

为什么会这样呢?我的主要问题是-如何使其在脚本中起作用?

更新

% bash --version
GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.

% uname
Linux lx1 2.6.32-642.6.2.el6.x86_64 #1 SMP Mon Oct 24 10:22:33 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux
格里高利

因此,最终我编写了可以在脚本中使用的我自己的选择。

# $1 timeout
# rest - selection
function select_ {
  t=$1
  shift
  arr=($*)
  i=1
  for a in $*; do
    echo "$i) $a" >$(tty)
    ((i++))
  done
  echo "TIMEOUT: In ${t} seconds ${arr[0]} will be automatically selected." >$(tty)
  printf "#? " >$(tty)
  read -t $t x
  [ "$x" == "" ] && {
     x=1
     echo "$x" >$(tty)
  }
  ((x=x+0))
  [ "$x" -ge 1 -a "$x" -le ${#arr[@]} ] && {
    ((x--))
    echo ${arr[$x]}
  }
}

如何使用它:

select_ 10 a b c

例子:

$ ./x.sh
1) a
2) b
3) c
TIMEOUT: In 10 seconds a will be automatically selected.
#? 2
b

$ ./x.sh
1) a
2) b
3) c
TIMEOUT: In 10 seconds a will be automatically selected.
#? 1
a

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 powershell 读取文本文件仅适用于 powershell 屏幕命令,而不适用于脚本

来自分类Dev

XSLT样式表不适用于Firefox中的XML。如何解决?

来自分类Dev

bash脚本中的rm命令不适用于变量

来自分类Dev

Plink不适用于sudo中git的命令文件

来自分类Dev

为什么ansi转义不适用于代码块,以及如何解决?

来自分类Dev

自然滚动不适用于水平滚动,如何解决此问题?

来自分类Dev

Perl 命令适用于命令行,但不适用于 bash 脚本

来自分类Dev

@reboot适用于命令,但不适用于脚本-Cron

来自分类Dev

函数适用于命令行,但不适用于脚本

来自分类Dev

我该如何解决此mongodb错误?:MongoError:'energy。$ cond'中以美元($)为前缀的字段'$ cond'不适用于存储

来自分类Dev

替换脚本不适用于Unicode txt文件

来自分类Dev

ls命令不适用于包含大量文件的目录

来自分类Dev

touch命令不适用于多个文件?

来自分类Dev

排序命令不适用于此文件

来自分类Dev

如何解决此问题:无法添加窗口-令牌null不适用于应用程序

来自分类Dev

为什么 grep 命令不适用于 UTF-16 LE 编码的文本文件?

来自分类Dev

AWS CLI S3命令不适用于文件夹中的空格

来自分类Dev

bash变量不适用于脚本中的ex

来自分类Dev

setValues不适用于Google Apps脚本中的数组

来自分类Dev

超时不适用于bash脚本中的累计外壳

来自分类Dev

setValues不适用于Google Apps脚本中的数组

来自分类Dev

jQuery文件上传不适用于Select2

来自分类Dev

sed命令不适用于Unix中的某些字符

来自分类Dev

Jenkins变量不适用于管道中的sed命令

来自分类Dev

页面更改命令不适用于类中的定义

来自分类Dev

cmd中的httpd命令不适用于Apache

来自分类Dev

命令替换不适用于 Bash 中的“test”或“[”或“[[”

来自分类Dev

适用于 PHP 但不适用于脚本

来自分类Dev

.gitignore不适用于文件夹中的文件

Related 相关文章

  1. 1

    使用 powershell 读取文本文件仅适用于 powershell 屏幕命令,而不适用于脚本

  2. 2

    XSLT样式表不适用于Firefox中的XML。如何解决?

  3. 3

    bash脚本中的rm命令不适用于变量

  4. 4

    Plink不适用于sudo中git的命令文件

  5. 5

    为什么ansi转义不适用于代码块,以及如何解决?

  6. 6

    自然滚动不适用于水平滚动,如何解决此问题?

  7. 7

    Perl 命令适用于命令行,但不适用于 bash 脚本

  8. 8

    @reboot适用于命令,但不适用于脚本-Cron

  9. 9

    函数适用于命令行,但不适用于脚本

  10. 10

    我该如何解决此mongodb错误?:MongoError:'energy。$ cond'中以美元($)为前缀的字段'$ cond'不适用于存储

  11. 11

    替换脚本不适用于Unicode txt文件

  12. 12

    ls命令不适用于包含大量文件的目录

  13. 13

    touch命令不适用于多个文件?

  14. 14

    排序命令不适用于此文件

  15. 15

    如何解决此问题:无法添加窗口-令牌null不适用于应用程序

  16. 16

    为什么 grep 命令不适用于 UTF-16 LE 编码的文本文件?

  17. 17

    AWS CLI S3命令不适用于文件夹中的空格

  18. 18

    bash变量不适用于脚本中的ex

  19. 19

    setValues不适用于Google Apps脚本中的数组

  20. 20

    超时不适用于bash脚本中的累计外壳

  21. 21

    setValues不适用于Google Apps脚本中的数组

  22. 22

    jQuery文件上传不适用于Select2

  23. 23

    sed命令不适用于Unix中的某些字符

  24. 24

    Jenkins变量不适用于管道中的sed命令

  25. 25

    页面更改命令不适用于类中的定义

  26. 26

    cmd中的httpd命令不适用于Apache

  27. 27

    命令替换不适用于 Bash 中的“test”或“[”或“[[”

  28. 28

    适用于 PHP 但不适用于脚本

  29. 29

    .gitignore不适用于文件夹中的文件

热门标签

归档