Articles of shell

使用getopts(bash)的多个选项参数

我想在bash中使用getopts来处理命令行参数。 其中一个要求是处理任意数量的选项参数(不使用引号)。 第一个例子(只抓取第一个参数) madcap:~/projects$ ./getoptz.sh -sabc -s was triggered Argument: a 第二个例子(我希望它的行为是这样的,但不需要引用“ madcap:~/projects$ ./getoptz.sh -s "abc" -s was triggered Argument: abc 有没有办法做到这一点? 这里是我现在的代码: #!/bin/bash while getopts ":s:" opt; do case $opt in s) echo "-s was triggered" >&2 args="$OPTARG" echo "Argument: $args" ;; \?) echo "Invalid option: -$OPTARG" >&2 ;; 🙂 echo "Option -$OPTARG requires […]

Bash监视磁盘使用情况

我买了一个有debian的debian的NAS盒子。 前些天空间不足,我没有意识到。 我基本上想编写一个bash脚本,当磁盘达到90%以上时会提醒我。 有谁知道脚本会做到这一点,或给我一些build议,写一个?

如果一个命令行程序不确定stdout的编码,它应该输出什么编码?

我有一个用Python编写的命令行程序,当我通过命令行上的另一个程序pipe理它时, sys.stdout.encoding是None 。 这是有道理的,我想 – 输出可能是另一个程序,或者一个文件,你redirect到,或者其他什么,它不知道什么编码是需要的。 但我也不是! 这个程序将以不同的方式被许多不同的人使用(幽默我)。 我应该玩它安全,只输出ascii(用问号replace非ASCII字符)? 或者我应该输出UTF-8,因为这些日子如此普遍?

轻量级GNU readline替代品

我正在寻找一个GNU readline的select。 它具有很多function,但只有其中的几个对我来说是有用的,如下所述 – 我正在处理交互式命令提示符应用程序(显示提示符并接受下一个要运行的用户命令)。 我想为提示实现一些编辑和历史function。 所以当用户按UP键时,应该显示最后一个运行命令。 另外,如果需要编辑任何错字或命令开关等,用户应该能够使用箭头键进行导航。 在Windows上,类似的东西已经存在了,如果你使用fgets或者scanf在cmd提示符下input,它已经保存了历史logging,并且允许你编辑。 有没有一个很好的select在Linux上?

将string拆分成bash中的数组

我正在寻找一种方法来在bash中分隔string中的string,并将这些部分放在一个数组中。 简单案例: #!/bin/bash b="aaaaa/bbbbb/ddd/ffffff" echo "simple string: $b" IFS='/' b_split=($b) echo ; echo "split" for i in ${b_split[@]} do echo "—— new part ——" echo "$i" done 给出输出 simple string: aaaaa/bbbbb/ddd/ffffff split —— new part —— aaaaa —— new part —— bbbbb —— new part —— ddd —— new part —— ffffff 更复杂的情况: #!/bin/bash c=$(echo […]

显示套接字选项

我如何从shell中看到什么套接字选项被设置? 特别是我很有兴趣知道SO_BROADCAST是否被设置?

linux-shell:将文件重命名为创build时间

大家早上好, 为一个网站,我想重命名文件(图片)从“1.jpg,2.jpg,3.jpg …”到“yyyymmdd_hhmmss.jpg” – 所以我想读出创build把这个时间设置为图片的名字。 有没有人有一个想法如何做到这一点,例如一个Linux的壳或imagemagick? 谢谢!

Linux的头部/尾部有偏移量

有没有办法在Linux的要求头或尾,但有一个额外的logging偏移忽略。 例如,如果文件example.lst包含以下内容: row01 row02 row03 row04 row05 我使用head -n3 example.lst我可以得到1 – 3行,但如果我想要它跳过第一行,并获得第2 – 4行呢? 我问,因为一些命令有一个头可能不是在search结果内。 例如du -h ~ –max-depth 1 | sort -rh du -h ~ –max-depth 1 | sort -rh将返回主目录中按降序排列的所有文件夹的目录大小,但会将当前目录附加到结果集的顶部(即~ )。 头部和尾部手册页似乎没有任何偏移参数,所以也许有某种range命令,可以指定所需的行:例如range 2-10或什么?

getopts不会连续调用两次?

由于某些原因,这些选项可以正常工作,第一次调用lib_progress_bar -c "@" -u "_" 0 100 ,但是在第二次调用之后,一切都是默认的,因为它看起来像getopts c:u:d:p:s:%:m: flag第二次不是真的,或者至less在我使用set -x时候永远不会执行 #!/bin/bash lib_progress_bar() { local current=0 local max=100 local completed_char="#" local uncompleted_char="." local decimal=1 local prefix=" [" local suffix="]" local percent_sign="%" local max_width=$(tput cols) local complete remain subtraction width atleast percent chars local padding=3 while getopts c:u:d:p:s:%:m: flag; do case "$flag" in c) completed_char="$OPTARG";; u) […]

在shell中自定义选项卡完成

这可能比“自定义选项卡完成”有一个更好的名称,但这里的情况是: 通常,当我在命令行中input一个命令时,后跟{TAB}两次,我会得到当前目录中所有文件和子目录的列表。 例如: [user@host tmp]$ cat <TAB><TAB> chromatron2.exe Fedora-16-i686-Live-Desktop.iso isolate.py favicon.ico foo.exe James_Gosling_Interview.mp3 不过,我注意到至less有一个程序过滤这个列表: wine 。 考虑: [user@host tmp]$ wine <TAB><TAB> chromatron2.exe foo.exe 它有效地将结果过滤到*.exe 。 认为它可能是一些负责过滤的包装脚本,做了一个和它的file变成wine不是一个脚本,而是一个可执行文件。 现在,我不知道这个“filter”是否在程序本身编码,或者在默认的wine安装过程中指定,所以我不知道这个问题是更适合的stackoverflow或超级用户,所以我穿过我的手指,扔在这里。 我很抱歉,如果我猜错了。 (另外,我也检查了一些类似的问题,但大多数都是不相关的,或者涉及编辑shellconfiguration。) 所以我的问题是,这个“过滤”是如何完成的? 提前致谢。