Questions tagged «bash»

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

1
set -e和grep惯用法防止未找到模式时从shell脚本过早退出
需要帮助-在GNU / LINUX bash上的shell脚本中: 我总是用set -e。通常,grep如果grep退出状态1表明未找到模式,我通常不希望脚本终止执行。 我尝试解决此问题的方法如下: (尝试I) 如果set +o pipefail使用类似的方法调用grep,grep 'p' | wc -l那么我将获得所需的行为,直到将来的维护者启用为止pipefail。另外,我喜欢启用,pipefail因此这对我不起作用。 (尝试II) 使用sed或awk仅打印匹配模式的行,然后使用wc匹配行测试匹配的模式。我不喜欢这样的选择,因为使用sed到grep似乎是我的真实问题的方法。 (尝试III) 这是我最不喜欢的-类似于:set +e; grep 'p'; set-e 任何见解/习惯用语将不胜感激-谢谢。
15 bash  grep  gnu  coreutils 

1
为什么在bash快捷方式中不使用Ctrl + m和Ctrl + q?
最近,我一直在查看bash快捷键,并尝试为我的tmux激活键找到合适的键。 根据https://en.wikipedia.org/wiki/Bash_(Unix_shell),我发现它很有趣,ctrl + m并且ctrl + q没有在bash快捷方式中使用。 为什么不使用它们?我觉得ctrl + m很方便。 这两种组合是否是设计要DIY (define it yourself)使用的?还是还有另一个故事?

1
退出一个终端时更新其他终端上的bash历史记录
我知道这个问题并不是很模糊,因为这里的问题一直在更新(这里重复)。 我想要达到的目标有些不同。我不喜欢每次ls输入(history -a; history -c; history -r)时都会立即重写文件的想法。 我想在退出时更新文件。这很简单(实际上是默认设置),但是您需要添加而不是重写: shopt -s histappend 现在,当终端关闭时,我想让所有其他保持打开状态以了解更新。 我更喜欢这样做,而不必检查我键入的$PS1每个内容command。我认为捕获某种信号会更好。你会怎么做?如果不可能,也许简单cronjob吗? 我们如何解决这个难题?

3
保存退出代码以备后用
因此,我有一个用于运行某些测试的小脚本。 javac *.java && java -ea Test rm -f *.class 现在的问题是,当我运行脚本时./test,即使由于rm -f *.class成功而导致测试失败,它也会返回成功的退出代码。 我想让它做我想做的唯一方法对我来说很丑陋: javac *.java && java -ea Test test_exit_code=$? rm -f *.class if [ "$test_exit_code" != 0 ] ; then false; fi 但这似乎是一个常见的问题-执行任务,清理,然后返回原始任务的退出代码。 什么是最惯用的方式(使用bash或一般来说只是shell)?

1
引用bash数组值时,@和*有什么区别?
这个Bash指南说: 如果索引号是@或*,则引用数组的所有成员。 当我这样做时: LIST=(1 2 3) for i in "${LIST[@]}"; do echo "example.$i " done 给出:(example.1 example.2 example.3期望的结果)。 但是当我使用时${LIST[*]},我得到了example.1 2 3。 为什么? 编辑:使用printf时,@和*实际上给出相同的结果。
15 bash  array 



2
GLOBIGNORE如何运作?
根据bash的手册页: GLOBIGNORE A colon-separated list of patterns defining the set of filenames to be ignored by pathname expansion. If a filename matched by a pathname expansion pattern also matches one of the patterns in GLOBIGNORE, it is removed from the list of matches. 但是在实践中... $ bash --noprofile --norc bash-4.2$ touch …

4
如何使bash在语法错误时中止脚本的执行?
为了安全起见,如果脚本遇到语法错误,我希望bash中止脚本的执行。 令我惊讶的是,我无法实现这一目标。(set -e还不够。)示例: #!/bin/bash # Do exit on any error: set -e readonly a=(1 2) # A syntax error is here: if (( "${a[#]}" == 2 )); then echo ok else echo not ok fi echo status $? echo 'Bad: has not aborted execution on syntax error!' 结果(bash-3.2.39或bash-3.2.51): $ ./sh-on-syntax-err …


1
带有时间戳的Bash历史记录
我想在我的Bash $ HISTFILE中登录的命令上保留时间戳,可以吗? 我没有将其设置man bash为信息源。 我的其他选择如下: function thebanana() { local -r -a bash_commands=( "ls" # ... more coconut commands ) for bash_command in "${bash_commands[@]}"; do printf "${bash_command}" printf ":" done } export HISTFILE=banana export HISTIGNORE="$(thebanana)" export HISTSIZE=999999 export HISTFILESIZE=999999999 export HISTCONTROL=ignoredups:erasedups 我应该提到我在OS X Mountain Lion上(叹气)。uname -a给我: Darwin CoconutMac.local 12.2.0 Darwin …

5
为什么grep无法与重定向一起使用?
将top命令与重定向一起使用可以正常工作: top > top.log 现在,我想使用grep过滤特定行: top | grep "my_program" > top.log 但是日志文件将保持为空。但是grep在使用时会提供输出 top | grep "my_program" 必须在其中my_program替换正在运行的程序才能看到一些输出。 为什么我的方法行不通?我该如何解决呢?
15 bash  grep 

3
使用输入/输出命名管道进行TCP连接
我一直很想让它工作一段时间,所以我怀疑对管道如何工作的某种根本误解是造成麻烦的根本原因。 我的目标是通过netcat文件系统上的某个远程主机启动TCP连接,并在文件系统上有两个命名管道:一个可以读取进程以获取传入数据,另一个可以写入进程作为传出数据。我目前正在使用以下构造: mkfifo in mkfifo out cat out | netcat foo.bar.org 4000 > in & 从这里开始,我想允许其他进程对该开放的TCP连接进行读写。这应该“起作用”,还是有这样的构造不能起作用的原因? 什么似乎目前发生的是,我可以读取out没有问题,但是当我写到in我得到的输出提一个破碎的管道和所有后续通信似乎是死了。有什么想法吗? (相关:我最初使用: netcat foo.bar.org 4000 < out > in & 但发现它阻止了等待输入。我对此也很好奇,但最好在一个单独的问题中解决。)
15 bash  pipe  tcp  netcat 

2
使用tar / gz通过SSH将目录压缩到本地计算机?
我想本质上是在远程计算机上tar / gz目录并将文件保存到本地计算机,而不必从远程计算机重新连接到本地计算机。有没有办法通过SSH执行此操作?tar文件不需要存储在远程计算机上,只需存储在本地计算机上。这可能吗?
15 bash  ssh  tar 

3
如何处理bash管道中的原始二进制数据?
我有一个bash函数,该函数将文件作为参数,验证文件是否存在,然后将标准输入中的所有内容写入文件中。天真的解决方案适用于文本,但我在使用任意二进制数据时遇到问题。 echo -n '' >| "$file" #Truncate the file while read lines do # Is there a better way to do this? I would like one... echo $lines >> "$file" done
15 bash  shell  binary 

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.