草庐IT

BASH_SOURCE

全部标签

linux - 执行 if...then...fi 时出现 Cygwin 错误 - Bash 脚本

我刚开始bashshell编程。我在我的Windows7计算机上安装了Cygwin。我开始使用thistutorial编写脚本.我的脚本需要一个参数传递给它,如果没有,它应该显示一条错误消息。这是直接来自教程的代码和我的代码中的相同代码:[$#-eq0]&&{echo"usage:someArgument";exit1;}当我执行以下操作时:sh./myscript.sh它给我这个错误:-bash:/home/Me/myscript.sh:line5:syntaxerror:unexpectedendoffile“意外的文件结束”意味着我在某处错过了fi或done等。我仔细检查了我的代

linux - Bash脚本被杀死时如何杀死当前命令

我目前有一个看起来像这样的脚本。#codemplayer"$vid"#morecode问题是,如果这个脚本被杀死,mplayer进程仍然存在。我想知道我怎样才能做到杀死脚本也会杀死mplayer。我不能使用exec因为我需要在mplayer之后运行命令。execmplayer"$vid"我能想到的唯一可能的解决方案是在后台生成它并等待它手动完成。这样我就可以获得它的PID并在脚本被杀死时将其杀死,这并不十分优雅。我想知道执行此操作的“正确”或最佳方法是什么。 最佳答案 我能够测试我在评论中发布的prctl想法,它似乎有效。你需要编译

linux - Bash:如何为 ssh 命令实时过滤 tee 输出?

我的目标是为我的sshsession中使用的命令制作一个带时间戳的日志。只要输出没有被过滤,Tee就会实时工作。当我tail-Ftest.log时,以下命令实时附加输出:#!/bin/bashssh"$@"|tee-atest.log但是,当我尝试通过thisquestion中建议的方法修改tee的输出时,输出不再是实时的。例如:#!/bin/bashssh"$@"|tee>(grep-e'.*\@.*\:.*\$.*'--color=never>>test.log)奇怪的是,如果我用“yes”命令代替ssh命令,输出会被实时正确过滤。实时处理很重要,因为我的脚本需要将当前时间戳附加到

linux - 用 '~' 替换主文件夹路径的 bash 当前工作目录

有没有办法用~替换主目录来回显当前目录?例子:~/inbox而不是/home/john/inbox不应对主目录进行硬编码。有$PWD和$HOME变量。一个内置的bash工具会很好。 最佳答案 echo"${PWD/#$HOME/\~}"这会将$HOME替换为~。#类似于正则表达式中的^:它将匹配锚定到字符串的开头。\~将$HOME替换为波浪号;如果我们不使用\转义符,~将重新扩展为$HOME并且实际上什么都不做。 关于linux-用'~'替换主文件夹路径的bash当前工作目录,我们在St

linux - 在 bash 别名中转义字符

这个问题在这里已经有了答案:bashaliascommandwithbothsingleanddoublequotes(4个答案)关闭2年前。这是别名:#makeatmuxsessioninworkingdirwiththenameofthediraliasth='tmuxnew-s$(pwd|tr'\/''\n'|tail-n1)'由于转义字符或别名内的',单引号,它不起作用。打印出来$type--allththisaliasedto`tmuxnew-s$(pwd|tr/n|tail-n1)'看起来它只是剥离了'和\。我最终通过将单引号更改为双引号来修复它。#makeatmuxses

linux - bash 脚本中的 '(( 10#$H > 5 ))' 是什么意思?

我对以下代码片段感到困惑:#!/bin/bashH=$(date+%H);if((10#$H>5))then#dosomethingelse#dosomethingelsefi上面代码片段中的((10#$H>5))是什么意思? 最佳答案 10#$H表示以10为基数展开数字。这可能是为了从日期中删除任何前导零,因为bash将解释基数8(八进制)中的数字。例子:$echo"$((08ARITHMETICEVALUATION:Constantswithaleading0areinterpretedasoctalnumbers.Aleadi

linux - Bash:我如何从文件中选择列中具有特定值的行

我有一个大文件需要分析。我想要做的是将那些在特定列中具有特定值的行分开。所以,这就像只选择属于特定类别的那些数据。如何使用简单的bash命令或脚本来实现这一点。例如,我只想分隔第8列中值为1、2、3或4的那些行。该文件以空格分隔。 最佳答案 您可以将awk用作:awk'$8==1||$8==2||$8==3||$8==4'file 关于linux-Bash:我如何从文件中选择列中具有特定值的行,我们在StackOverflow上找到一个类似的问题: https

linux - 如何将一系列 AT 命令发送到 bash 中的串口?

在Linux中,我需要将一系列AT命令发送到串行端口,例如/dev/ttyS0,在发送下一个命令之前必须等待OK回答。我可以想象做类似的事情echo'AT'>/dev/ttyS0echo'ATS0=0'>dev/ttyS0...但这不会评估该端口上设备的应答。是否有一种非常简单的方法可以在bash脚本中自动化,可能需要socat和/或的帮助microcom但没有最简单的linux系统上找不到的工具。 最佳答案 如果您安装了PPP包,您可以使用它附带的chat程序。或者你可以使用kermit。或者uucp自带的cu程序。但是用纯she

linux - 将 Windows 路径转换为 ​​Linux 路径的 Bash 脚本

我是shell脚本的新手,正在尝试完成以下操作,将windows路径转换为​​linux路径并导航到该位置:输入:cdwin"J:\abc\def"操作:cd/usr/abc/def/因此,我正在更改以下内容:"J:"->"/usr"和"\"->"/"这是我的尝试,但它不起作用。如果我回应它,​​它只会返回一个空白:functioncdwin(){line="/usrfem/Projects$1/"|sed's/\\/\//g'|sed's/J://'cd$line} 最佳答案 您需要捕获变量然后对其进行处理。例如,这将使它:fun

linux - 在 BASH 中格式化文本

我绝对是Shell脚本的初学者。我的任务是制作一个脚本,它将显示文件中使用的函数(调用者和被调用者)。我已经使用objdump、grep、awk等来获得这个输出:000000000040090d:000000000040095d:400970:e898ffffffcallq40090d000000000040097f:4009bc:e89cffffffcallq40095d00000000004009c6:400a0e:e86cffffffcallq40097f400a26:e832ffffffcallq40095d400a41:e839ffffffcallq40097f400a59: