Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

2
如何为特定命令指定自定义自动完成功能?
有没有一种方法可以让bash确切知道在双击选项卡时显示什么?例如,我有一个scpy需要几个参数的python脚本。例如,例如apt-get,如果您双标签给您 autoclean build-dep clean dselect-upgrade清除源升级 自动删除检查dist-upgrade安装删除更新 有没有办法对自己的脚本/程序执行此操作?我需要将我的python脚本包装在bash脚本中吗?

2
如何捕获有序的STDOUT / STDERR并添加时间戳/前缀?
我已经探索了几乎所有 可用的 类似 问题,但均无济于事。 让我详细描述问题: 我运行一些无人值守的脚本,这些脚本可以产生标准输出和标准错误行,我想捕获它们 按终端仿真器显示的精确顺序,然后向它们添加诸如“ STDERR:”和“ STDOUT:”的前缀。 我尝试对它们使用管道,甚至基于epoll的方法,都无济于事。我认为解决方案是使用pty,尽管我对此并不熟练。我也偷看了Gnome VTE的源代码,但是效率不高。 理想情况下,我会使用Go而不是Bash来完成此操作,但我一直无法做到。似乎管道由于缓冲会自动禁止保持正确的行顺序。 有人能够做类似的事情吗?还是不可能?我认为,如果终端仿真器可以做到这一点,那不是-可能是通过创建一个以不同方式处理PTY的小型C程序吗? 理想情况下,我将使用异步输入读取这两个流(STDOUT和STDERR),然后根据需要重新打印它们,但是输入顺序至关重要! 注意:我知道stderred,但是它不适用于Bash脚本,并且不能轻易地添加前缀(因为它基本上包装了许多syscall)。 更新:添加以下两个要点 生成混合stdout / stderr的示例程序 上面程序的预期输出 (可以在我提供的示例脚本中添加亚秒级随机延迟以证明结果一致) 更新:正如@Gilles指出的那样,该问题的解决方案也将解决其他问题。但是我得出的结论是,不可能在这里和那里做所要求的事情。当使用2>&1这两种流时,应该在pty / pipe级别正确合并,但是要分别并以正确的顺序使用流,实际上应该使用stderred的方法,即involes syscall挂钩,并且在许多方面都可以视为脏污。 如果有人可以反驳以上内容,我将急于更新此问题。

2
在bash中对while循环条件求反
在我正在处理的脚本的一部分中,我想验证输入的IP地址的格式正确。我想在输入格式不正确时进行循环。当格式正确时,以下内容适用于循环。 while [[ $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]] do 我该如何转转说不适合该格式。我希望!=~可以使用,但是出现语法错误。
25 bash 

2
>>和> \>运算符之间的区别?
RHEL 6 >>和>\>运算符之间有区别吗?我在RHEL培训书中阅读了以下内容: “您可以使用以下命令通过双重定向箭头将标准输出添加到现有文件的末尾: ls >\> filelist 我更习惯于>>操作员,当我尝试两者时,都会得到不同的结果。 使用>>似乎将输出附加到其后的文件(按预期方式)。 使用>\>似乎将输出追加到字面上称为>的文件中 这是我正在阅读的书中的错误吗?还是我错过了作者的观点?
25 bash  rhel 


3
如何检测我是否在子外壳中?
我正在尝试编写一个函数来替换exit内置函数,以防止自己退出终端。 我试图使用SHLVL环境变量,但是在子外壳中似乎没有改变: $ echo $SHLVL 1 $ ( echo $SHLVL ) 1 $ bash -c 'echo $SHLVL' 2 我的功能如下: exit () { if [[ $SHLVL -eq 1 ]]; then printf '%s\n' "Nice try!" >&2 else command exit fi } 但是,这不允许我exit在子shell中使用: $ exit Nice try! $ (exit) Nice try! 有什么好的方法可以检测我是否在子外壳中?
24 bash  shell  exit  subshell 

3
/ bin / bash的内容是什么,如果不小心覆盖了它们该怎么办
我不小心用了我打算放在/ bin文件夹中的愚蠢脚本覆盖了/ bin / bash文件。 如何获取该文件的内容?有什么方法可以在网上找到内容,然后将它们复制回去?考虑到该终端在谈论“太多符号链接”时出错,我在这里有什么选择? 我仍然是这种事情的新来者,我很感谢我所能获得的所有帮助。 编辑:我忘了提到我在Kali 2.2 Rolling上,这几乎是具有一些附加功能的debian。 编辑2:我也重新启动了机器,因为直到几天前我才意识到自己的错误。这使这变得更加困难。



5
如何获取运行bash的tty?
在此页面提出的第二种方法中,使用以下命令获取正在运行bash的tty: ps ax | grep $$ | awk '{ print $2 }' 我个人认为这确实有点懒,列出所有正在运行的进程只是为了提取其中一个。这样做会不会更有效(我也在问这是否会带来不良影响)? ps -p $$ | tail -n 1 | awk '{ print $2 }' 仅供参考,我遇到了这个问题,因为有时第一个命令实际上会产生两行(或更多行)。当会有另一个进程运行包含PID $$作为子字符串的PID时,这将是随机发生的。在第二种方法中,我通过请求我知道自己想要的PID来避免此类情况。
24 bash  tty  ps 


1
命令行工具如何具有自己的自动完成列表?
Ubuntu中的Bash如何知道工具的特定动作列表? 例如,如果我键入apt-get和tab两次,我只会看到删除,更新,升级... etc,但是看不到其他命令或当前目录中文件的操作。 我正在Go中开发命令行工具,并希望为支持它的发行版提供此功能。

4
如何自定义Bash命令完成?
在bash中,使用complete内置的命令设置自定义的命令参数完成很容易。例如,如果对于带有的摘要的假设命令foo --a | --b | --c,则可以执行complete -W '--a --b --c' foo 您还可以自定义,当你按下你完成Tab在空提示符下使用complete -E,例如,complete -E -W 'foo bar'。然后在空白提示下按Tab键将仅建议foo和bar。 如何在非空提示下自定义命令完成?例如,如果我坐在: anthony@Zia:~$ f 如何自定义完成,使按Tab键始终完成foo? (我想要的实际情况是locTAB→ localc。而促使我问这个问题的我的兄弟希望通过mplayer来解决这个问题。)

4
以bash开头:-lt和-gt参数
我从bash开始,发现以下内容: if test $first -lt $second then echo $first is lower than $second else if test $first -gt $second then echo $first is higher than $second else echo $first and $second are equals fi fi 对于阅读脚本并执行它,我知道它的作用,但不知道-lt和-gt的作用。 有人可以告诉我这种“工具”的名称是什么,它们(-lt和-gt)的作用是什么?谢谢!
24 bash  shell  test 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.