Questions tagged «bash»

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

5
我只能从bash球中选择一个结果吗?
我正在尝试编写一个脚本来自动执行一些输出报告。日志文件(目前正在将来被标准化)存储在这种路径结构中: /<root_path>/<process_one_path>/logs/<time_date_stamp>/<specific_log_file> /<root_path>/<process_two_path>/logs/<different_time_date_stamp>/<specific_log_file> 除时间标记外,路径的每个部分都是已知的,时间标记始终是文件夹中的最新标记。 如果我尝试使用通配符代替时间戳记,则会得到多个结果,例如: > ls /<root_path>/<process_two_path>/logs/* [tab] 20130102-175103 20130118-090859 20130305-213506 我只希望它返回最新版本,Bash可以吗? NB(我没有zsh,而且听起来很可爱,我怀疑我们是否会成功使用它)
14 bash  wildcards  glob 

4
Ctrl-Z和kill -STOP有什么区别?
当make从外壳程序运行命令(在大型项目上)时,可以键入Ctrl-Z来停止该过程并返回到外壳程序。随后,我可以运行fg以继续该过程。 我正在尝试编写一个shell脚本来自动执行此操作(特别是每隔几秒钟检查一次我的CPU温度,并在温度过高时停止该过程,因为我的计算机容易过热)。我的第一次尝试是这样的(简化的): make & subpid="$!" sleep 2 # If the CPU temperature is too high... kill -STOP "$subpid" sleep 2 # If the CPU temperature has dropped to safe levels... kill -CONT "$subpid" wait "$subpid" 不幸的是,这没有用。向该进程发送SIGSTOP不会暂停它(通过继续将输出发送到终端可以明显看出这一点)。我make &在命令行中运行,发送了SIGSTOP,并使用ps;检查了进程状态。它被列为已停止(并在我发送SIGCONT时再次启动),但它仍在喷射输出并提高核心温度!使用Ctrl-Z停止它从来没有这个问题,但是我不知道如何在脚本中做到这一点。 是什么使Ctrl-Z与有所不同kill -STOP,以及如何在Shell脚本中获得前者的行为?

1
Bash不再更改目录
我的bash shell将不再使用cd更改目录。我在工作时注意到了这一点,发现我打开的任何新外壳程序(终端或xterm等)都将卡在主目录中并且无法退出(已经打开的终端继续正常工作)。 [~]$ pwd /home/sys/dave [~]$ cd / [~]$ cd Documents/ [~]$ pwd /home/sys/dave [~]$ type cd cd is a shell builtin [~]$ alias alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 我认为这一定是我没有时间处理的怪异现象,例如内存不足的处理程序(已检查cd是否没有别名并使用内置版本)。 因此,我(是的,我知道)重新启动了计算机。 重新启动,完全一样的问题。 另一方面,CSH可以正常运行,因此在上面的代码段之后立即执行以下操作: …
14 linux  bash 

2
为什么此xargs命令不起作用?
我想删除所有.sh扩展名,所以这样做: ls *.sh | xargs -I {} mv {} `basename {} .sh` 但是,它不起作用,其行为类似于basename返回未更改的文件名。 为什么会这样呢? 例如,这有效: ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`; 编辑: 解决方案:单引号可防止`basename ...`在运行命令之前由外壳进行评估。 ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'

2
没有向xargs管道
我有一个脚本,在某些情况下,stdout上可能没有任何内容。在脚本的最后,我使用xargs将必须的行传递给另一个命令。我的问题是,当stdout上没有任何内容时,我收到典型的“用法:程序arg1 arg2”错误消息。 如何避免这种情况?
14 bash  xargs 

11
如何找出我使用的RHEL版本?
我在一个环境中工作,我们正在缓慢地将机器从Red Hat Enterprise Linux 5迁移到RHEL 6。 我需要一些脚本来使RHEL6机器上的操作与当前在RHEL5机器上进行的操作有所不同。 务实的解决方案是在运行时检查并在RHEL5上运行某些命令,在RHEL6上运行其他命令,并在两者上运行。 一个实际的例子是,我们正在使用环境模块,并且.bashrc其中包含module load git一行,但是在RHEL6计算机上,此命令错误: RHEL6 system, git should be installed - not loading module 在modulefile中查找以下代码: set redhatrelease [eval exec "cat /etc/redhat-release"] if { [regexp -nocase {release 6} $redhatrelease] } { puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n" …
14 bash  rhel 


2
从已经运行的脚本重定向stderr
我已经运行脚本好几天了。我将stdout重定向到$HOME/mylog,但没有重定向stderr,因为我认为上面没有任何内容。突然,成千上万的线路开始在stderr上运行,所以我暂停了工作。$HOME/myerr从现在开始,是否有一种方法可以将stderr重定向到,而无需重新启动脚本? 我在盒子上有sudo访问权限,它是OSX。 也许有一些使用工具陷阱的东西? 我不会丢失脚本到目前为止所做的工作,并从头开始重新启动它。有没有一种方法可以在磁盘上“转储内存中的对象”,冻结程序,编辑变量(例如文件描述符)并使用新的上下文恢复?

3
将十进制打印为ASCII字符,我的命令未按预期输出
我想使用以下命令输出所有ascii字符的字符串 for i in `seq 32 127`; do printf "%c" $i; done 上面命令的输出是: 33333334444444444555555555566666666667777777777.............. 它是每个数字的第一个(从左到右)数字。 通过这个站点,我遇到了问题的答案如何在CLI中打印所有可打印的ASCII字符?,但是我仍然不明白为什么我的原始代码片段没有按预期输出ascii字符。


2
何时在环境变量和命令之间使用分号
谁能解释为什么必须用分号才能使LANGbash更新它? 不起作用: > LANG=Ja_JP bash -c "echo $LANG" en_US 作品: > LANG=Ja_JP ; bash -c "echo $LANG" Ja_JP 我正在使用Linux上的bash 4.1.10和cygwin下的相同版本

4
在文本中突出显示正则表达式的命令?
是否有命令突出显示文本中的某个表达式? 我正在寻找类似“搜索”功能的东西,但是要在stdout而不是less查看器上输出普通文本。 例: $ cat test.txt | highlight "an" 对于前景的距离Afgh有序撤出北约的 IST 的遭遇了两次挫折总统卡尔扎伊德国马克的关于美国军队DED限制的 d的塔里布的暂停和谈。 它可以使用颜色或任何其他方式突出显示指定的正则表达式。

4
在bash脚本中使用可变扩展查找-exec
我正在尝试在bash脚本中运行类似于以下命令的命令。它应搜索的所有子文件夹,$sourcedir并将特定类型的所有文件复制到的根级别$targetdir。 #!/bin/bash # These are set as arguments to the script, not hard-coded sourcedir="/path/to/sourcedir" targetdir="/path/to/targetdir" find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \; 这似乎很接近,除了{}没有传递$2给-exec sh -c ... 我希望这样做尽可能接近“正确的方式”,并允许对文件名中的特殊字符(特别是单引号字符)进行容忍。 编辑:我看到有人建议使用xargs或参数链。我的印象是,这仅适用于有限数量的参数。例如,如果我有成千上万个.jpg文件,我正试图将它们从许多画廊目录中复制到一个巨大的幻灯片目录中,则解决方案链接参数仍然有效吗? 编辑2:我的问题是我_在-exec命令中的第一个选项sh之前缺少。对于任何对如何使find命令起作用感到好奇的人,添加_,一切都会好起来的: find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2"' …

1
在带有管道的多行bash命令中的单独行上可读的注释?
使用管道创建Shell脚本并使用反斜杠继续行时,我想以健壮,可读和可移植的方式在单独的行上插入注释。 例如,给出以下未注释的多行命令(为清晰起见,从@DigitalRoss盗取): echo abc | tr a-z A-Z | sort | uniq ...从美学上讲,以下内容与我要完成的工作最接近,但是出于明显的原因,它不起作用...是的,我很清楚,这通常不值得评论: # Perform critical system task. # NOTE - An example of what does *not* work. echo abc | # Convert lowercase to uppercase. tr a-z A-Z | # Sort the results. sort | # Only show unique …
14 bash  shell  pipe 

4
Bash vi模式配置默认为命令模式
是否可以配置bash vi模式,使其最初处于命令模式而不是插入模式?我发现我必须按Esc得太多。似乎有可能在zsh中指定它,但是我还没有找到在bash / readline中执行此操作的方法。
14 bash  vi 

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.