Questions tagged «bash»

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

4
Bash中延迟挂起(Ctrl-Y)的目的是什么?
Bash手册页的整个部分仅适用于: 如果运行bash的操作系统支持作业控制,则bash包含使用它的工具。在进程运行时键入暂停字符(通常为^ Z,Control-Z)将导致该进程停止并将控制权返回给bash。 键入延迟的挂起字符(通常为^ Y,Control-Y)会导致该进程在尝试从终端读取输入时停止,并将控件返回到bash。 然后,用户可以使用bg 命令在后台继续执行该作业的状态,fg命令在前台继续执行,或使用kill命令将其删除。^ Z立即生效,并具有额外的副作用,导致丢弃待处理的输出和提前输入。 我从未用过Ctrl- Y; 我只是了解而已。我只用Ctrl- Z(暂停)就可以了。 我试图想象此选项的用途。什么时候有用? (请注意,并非所有Unix变体都具有此功能。Solaris和FreeBSD上存在此功能,而Linux上不存在。相应的设置为stty dsusp。) 也许少主观:有没有什么可以完成Ctrl- Y不能用很容易实现的Ctrl- Z?

3
查看一系列的bash历史记录
该history命令列出了当前会话的所有历史记录。喜欢: 1 ls 2 cd /root 3 mkdir something 4 cd something 5 touch afile 6 ls 7 cd .. 8 rm something/afile 9 cd .. 10 ls 11 history 为了寻找感兴趣的项目,我可以管history与grep像 history | grep ls 1 ls 6 ls 10 ls 我还可以查看最后3个命令,例如: history 3 11 history 12 history | grep …

3
五彩的Grep
我正在尝试让每个grep命令以不同的颜色突出显示它的结果。我可以用这样的一行手动进行操作: ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f 每个c字符将以绿色突出显示,每个o字符将以红色突出显示,等等。 为了使该示例正常工作,您需要确保始终使用 --color=alwaysgrep命令。我已经在我的.bashrc grep中设置了它,所以它将始终具有颜色: export GREP_OPTIONS='--color=always' 我要完成的工作是用别名包装此功能,这样我每次grep都可以调用并具有不同的GREP_COLORS值。我了解为每个新的管道grep考虑多个外壳的问题,并且我试图通过创建一些文件(每种颜色一个)来解决这个问题,以表明它们已被使用。 我做了一些尝试,但奇怪的是,这似乎是“最好的”方法。我在我的.bashrc: alias mg="mygrep" mygrep(){ # define possible colors COLORS=("01;32" "01;31" "01;34" "01;36") COUNTER=0 NUM=0 # as long as the color has already been used, keep …
30 bash  shell  grep  pipe  bashrc 

5
自Unix时代以来如何获得毫秒数?
我想做一个bash脚本,用于测量浏览器的启动时间,因为我正在使用html,它使用JavaScript获取了以毫秒为单位的时间戳加载时间。 在调用浏览器之前,在shell脚本中,我得到了时间戳: date +%s 问题在于它以秒为单位获取时间戳,我需要以毫秒为单位,因为有时第二次运行时浏览器在不到一秒的时间内启动,因此我需要能够使用毫秒而不是秒来精确地测量该时间。 如何从bash脚本获取以毫秒为单位的时间戳?
30 bash  timestamps 

8
如何有效地在bash中生成大的,均匀分布的随机整数?
我一直想知道什么是在bash中获得良好随机性的最佳方法,即,什么程序可以获取MIN和之间的随机正整数,MAX从而 该范围可以任意大(或至少,例如,高达2 32 -1); 值是均匀分布的(即无偏差); 这是有效的。 获得bash随机性的有效方法是使用$RANDOM变量。但是,这仅采样0到2 15 -1 之间的值,该值可能不足以用于所有目的。人们通常会使用模数使其达到他们想要的范围,例如, MIN=0 MAX=12345 rnd=$(( $RANDOM % ($MAX + 1 - $MIN) + $MIN )) 另外,这会产生偏差,除非$MAX碰巧将2 15 -1 = 32767相除。例如,如果$MIN为0且$MAX为9,则值0到7比值8和9更有可能,因为$RANDOM永远不会是32768或32769。随着范围的增加,此偏差会变得更糟,例如,如果$MIN为0且$MAX为9999,然后通过2767数字0具有的概率4 / 32767,而数字2768到9999只的概率3 / 32767。 因此,尽管上述方法满足条件3,但不满足条件1和2。 到目前为止,我想满足条件1和2的最佳方法是使用/dev/urandom以下方法: MIN=0 MAX=1234567890 while rnd=$(cat /dev/urandom | tr -dc 0-9 | fold -w${#MAX} | head -1 | …


2
将输出重定向到文件是否对文件施加锁定?
如果我有命令 $ ./script >> file.log 被两次调用,第二次调用在第一个调用结束之前发生,会发生什么? 第一次调用是否在输出文件上获得排他锁?如果是这样,第二个脚本在尝试编写时是否失败,或者外壳程序是否接受输出(允许脚本结束)并抛出错误? 还是日志文件被写入两次?

6
更改光标形状(或颜色)以在bash中指示vi模式
需要说明的是:在终端中使用vim时,我不问如何更改光标。我希望在Bash的vi模式下在输入模式和命令模式之间切换时光标会改变: set -o vi <CR> type some text <ESC> (the cursor changes shape/color) i (cursor change back) etc... 我发现了一个脚本,该脚本可以在zsh中更改模式更改时光标的颜色,但是我不想仅为此一项功能更改shell。 在Bash命令行上的命令和插入模式之间切换时,是否有办法使光标改变形状,例如gvim(甚至只是颜色)?
30 bash  vi  line-editor 

5
学习bash脚本的最佳资源?[关闭]
我已经用多种语言编程了两年,我的意思是我知道如何为给定的问题设计和实现一个不错的解决方案。 但是,bash让我头疼不已,只是没有任何工作能按预期进行,甚至没有错误。 我发现的所有指南都是非常非正式的,没有正确总结其语法或告诉您可能犯的最常见错误。 那你能推荐我什么?
30 bash  reference 


4
引用ssh $ host $ FOO和ssh $ host“ sudo su user -c $ FOO”类型的构造
我经常最终会通过ssh发出复杂的命令。这些命令涉及管道到awk或perl单行,因此包含单引号和$。我既没有想出正确的报价规则,也没有找到好的参考。例如,考虑以下内容: # what I'd run locally: CMD='pgrep -fl java | grep -i datanode | awk '{print $1}' # this works with ssh $host "$CMD": CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'" (请注意awk语句中的多余引号。) 但是我该如何使用它ssh $host "sudo su user -c '$CMD'"呢?在这种情况下是否有管理报价的一般方法?
30 bash  shell  ssh  quoting 


3
如果我sudo执行一个Bash脚本文件,那么Bash脚本中的所有命令是否也将作为sudo执行?
我想在Bash中编写一个自动化的安装后脚本(post-install.sh例如,称为)。该脚本将自动添加和更新存储库,安装和更新软件包,编辑配置文件等。 现在,如果执行该脚本(例如使用)sudo post-install.sh,是否仅会提示我输入一次sudo密码,或者sudo每次在脚本中需要sudo权限的命令调用时都需要输入密码?换句话说,可以这么说,bash脚本中的命令是否“继承”了执行权限? 并且,如果确实如此,那么sudo权限是否仍有可能超时(例如,如果特定命令花费的时间足够长以超过sudo超时时间)?还是初始sudo密码输入会持续整个脚本的整个过程?

6
命令替换:在换行符上分割,但不分割空格
我知道我可以通过几种方法解决此问题,但是我想知道是否有一种方法可以仅使用bash内置函数来实现,否则,最有效的方法是什么。 我有一个内容如下的文件 AAA B C DDD FOO BAR 我的意思是说它只有几行,每行可能有也可能没有空格。我想运行类似的命令 cmd AAA "B C DDD" "FOO BAR" 如果我使用cmd $(< file)我得到 cmd AAA B C DDD FOO BAR 如果我用cmd "$(< file)"我得到 cmd "AAA B C DDD FOO BAR" 我如何让每行都被正确地对待一个参数?

6
陷阱,ERR和回显错误行
我正在尝试使用陷阱创建一些错误报告,以针对所有错误调用函数: Trap "_func" ERR 是否有可能获得发送ERR信号的线路?外壳是bash。 如果这样做,我可以阅读和报告使用了什么命令,并记录/执行一些操作。 或者,也许我错了吗? 我测试了以下内容: #!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf" 并$LINENO返回2。不起作用。

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.