Questions tagged «bash»

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

9
如何编写系统登录测试?
我已经编写了一个Python CGI脚本来调用bash命令,它需要测试主机上的成功登录。 如何为此编写测试? 例如,我可以创建一个bash脚本来针对主机上的注册用户测试给定的用户名和密码组合吗?

1
通过bash历史记录访​​问时,屏幕会切断长命令的开头
我正在OS X Lion中使用bash和screen的默认版本。 当我处于屏幕会话中时,我会在bash历史记录中向后滚动,然后出现一个足以包装的命令。 我可能首先输入一些命令: selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1 83279836214c0.144847759343/ 上面的代码可以正确包装,但是如果我按bash的历史记录来访问它,则控制台仅显示: 83279836214c0.144847759343/ 因此,提示和命令的第一行都丢失了,这使得编辑变得很困难。如果我滚动回到第一行,它会出现,但是会覆盖输出的最后一行。当我执行命令时,第一行的其余部分将显示,并且一切看起来都与预期的一样: selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1 83279836214c0.144847759343/ total 1792 ... selassid@tem02:~$ 更奇怪的是,如果使用历史记录来访问长命令,但我还没有执行它,则使用任何C-a屏幕命令,例如切换到另一个窗口然后再返回,或者单击当前终端窗口中的回到它,history命令现在再次正确显示。 我的,PS1='\u@\h:\w$ '所以这里没有什么奇怪的。 使用历史记录时,是否可以正确显示整个命令?我尝试过使用屏幕环绕设置,但是它们只会使情况变得更糟。 stty -a 显示: speed 9600 baud; 46 rows; 80 columns; lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin …
9 bash  osx  gnu-screen 


2
并行化for循环
我想并行化for以下代码的循环。这个怎么做? #!/bin/bash N=$1 n=$2 for (( i=1; i<=$N; i++ )); do min=100000000000000 //set min to some garbage value for (( j=1; j<=$n; j++ )); do val=$(/path/to/a.out) val2=`echo $val | bc` if (( $val2 < $min )); then min=$val2; fi done arr=("${arr[@]}" "$min") done

1
如何停止Bash附加历史记录
我想要用自己的方式设置Bash的终端历史记录时遇到很多麻烦。我希望没有重复的条目,如果输入命令,我希望将其保存,并将上面的重复项删除。 问题是该history命令向我显示了它按照我想要的方式运行,但是一旦我注销,重复项就会再次出现。我相信这只是将历史添加到现有的历史上。我的.bashrc文件中包含以下几行: HISTCONTROL=ignoreboth:erasedups shopt -u histappend 我什至尝试取消注释shopt,但是它仍然在注销时附加历史记录。在注销之前,如何获得历史记录?

2
怪异的控制行为
我可以cat做为一个非常简单的文本编辑器cat > foo.txt。 如果我输入: bar baz 然后按ctrl+ D,现在看起来像这样: $ cat > foo.txt bar baz^D 光标放在^。如果再按一次,该文件将被保存。但是,如果我按其他任何键(可以,也许什么也不是,但大多数都可以),我将继续编辑文件。 这是正常行为吗?

1
我在哪里设置bash路径?
我想~/bin从我的路径中删除。几个月前,我对Linux(Ubuntu)感到陌生,但我不知道如何添加它。 当我搜索下面列出的所有文件时,什么都没有显示。 还有什么地方可以设置?它被后前置于$HOME/.profile前缀与PATH$HOME/bin 如果有什么不同,我可以从命令提示符和正在运行的脚本中获得相同的PATH。 #!/bin/bash { echo "first dir of PATH is: '${PATH%%:*}'" shopt -s nullglob cat \ /etc/profile \ /etc/bash.bashrc \ /etc/profile.d/*.sh \ $HOME/.bashrc \ $HOME/.bash_aliases \ /etc/bash_completion \ $HOME/.bash_completion* \ $HOME/.profile \ $HOME/.profile_zap \ $HOME/.bash_profile* \ $HOME/.bash_login* \ | sed -rne '/~\/bin/p' } 输出为: first dir of PATH …

2
编辑crontab时在终端中打开emacs
我已将设置emacs为我的默认编辑器/etc/profile。当我想emacs在终端中使用时。我用-nw选项打开它。crontab -e阻止它在窗口中打开时,我怎么有相同的行为?
9 bash  cron  emacs 

1
检测(从脚本)是否已安装软件的最佳方法是什么?
之前,我对which跨不同平台(Linux与Solaris vx。OS X)的命令输出有所不同感到沮丧,因为不同的外壳也可能会引起问题。 type有人建议将其作为更好的替代方法,但是它的便携性如何? 过去,我写过一些函数来解析输出which并处理遇到的各种用例。它们可以在我使用的所有机器上工作,因此对我的个人脚本来说还可以,但是对于我要发布给他人使用的软件来说,这似乎非常不可靠。 仅举一个可能的例子,假设我必须从脚本中检测bash和zsh在计算机上是否可用,然后使用zsh(如果存在)运行一个命令,如果zsh不存在并且bash足够,则使用bash运行一个命令。版本没有特定错误。该脚本的其余大部分内容可能是Bourne shell或Ruby或其他任何东西,但是必须使用zsh或bash的最新版本来完成这一特定操作(AFAIK)。 我可以指望type可以跨平台使用吗?是否有其他替代方法which可以轻松,一致地回答是否已安装特定软件的问题? (如果您还想提供与我给出的示例特别相关的想法,那很好,但是我主要是在询问一般情况:找出给定机器上是否安装了特定物品的最可靠方法是什么? ?)
9 bash  zsh  standard  which 

1
运行2 while循环的最有效方法
当前,我使用两个不同的while循环来启动窗口管理器dwm,并在其上显示系统信息。 目前,我的解决方案是在同一脚本中连续运行它们,如下所示: while true; do $HOME/Scripts/dwm-status sleep 2s done & while true; do dwm >/dev/null done 我还看到它像嵌套while循环一样运行: while true; do while true; do $HOME/Scripts/dwm-status sleep 2s done & dwm >/dev/null done 第二个似乎导致CPU峰值。就效率(最少调用资源等)而言,运行这两个循环的最佳方法是什么?为什么?


1
bash中的引号内的美元符号插值
我正在运行我编写的这个小测试脚本: #!/bin/bash TESTCASE=$@ testHarness <<runTest $TESTCASE runTest 从命令行: ./test.sh "1092$212" 但是美元符号被剥夺了。如果我逃脱了,那就行了。但是我认为双引号可以保护我免于这样做。有人可以帮我了解发生了什么以及如何解决此问题吗?
9 bash  shell  quoting 

6
比较目录1中而不是目录2中的文件?
我要制作的bash脚本遇到问题 我知道ls将列出目录中的文件,但是我希望它列出目录1中但不在目录2中的目录,然后列出目录2中不在目录1中的文件。 我做了一次微弱的尝试: ls -al | diff directory1 directory2 很快我意识到了为什么它不起作用。谁能帮个全力以赴的书呆子?
9 bash  shell-script  ls  diff 

2
在没有子shell的情况下遍历bash中命令的输出
我想遍历命令的输出而不创建子外壳或使用临时文件。 我的脚本的初始版本看起来像这样,但这不起作用,因为它创建了一个子外壳,并且该exit命令终止了该子外壳,而不是所需的主脚本。它是配置策略路由的更大脚本的一部分,如果它检测到会导致路由失败的条件,则将暂停执行。 sysctl -a 2>/dev/null | grep '\.rp_filter' | while read -r -a RPSTAT ; do if [[ "0" != "${RPSTAT[2]}" ]] ; then echo >&2 "RP Filter must be disabled on all interfaces!" echo >&2 "The RP filter feature is incompatible with policy routing" exit 1 fi done 因此,建议的替代方法之一是使用类似这样的命令来避免子外壳。 …

2
连接到byobu屏幕会话并执行命令?
在构建脚本时,我正在尝试如何尽可能地自动化。更有趣的挑战之一是连接到byobu屏幕会话并执行命令。 因此,我从一个明显的地方开始,查看有多少个屏幕会话(游戏在byobu中有3个窗口,lordquackstar有2个窗口。用户位于不同的腻子实例中) game@quackgame:~$ screen -ls There is a screen on: 2019.byobu (01/05/2011 05:10:04 PM) (Attached) 1 Socket in /var/run/screen/S-game. 那里只有一个,所以我检查了系统 lordquackstar@quackgame:/home/game$ sudo ls -lAR /var/run/screen/ /var/run/screen/: total 0 drwx------ 2 game users 100 2011-01-06 09:18 S-game drwx------ 2 lordquackstar lordquackstar 100 2011-01-06 09:17 S-lordquackstar /var/run/screen/S-game: total 4 prwx------ 1 game …

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.