Questions tagged «bash»

有关为Bash命令外壳编写的脚本的问题。对于具有错误/语法错误的shell脚本,请在此处发布之前,使用shellcheck程序(或在Web shellcheck服务器中的https://shellcheck.net)进行检查。有关Bash交互使用的问题更可能是Super User而不是Stack Overflow上的话题。


12
如何在bash中声明2D数组
我想知道如何在bash中声明2D数组,然后初始化为0。 在C中看起来像这样: int a[4][5] = {0}; 以及如何为元素分配值?如在C中: a[2][3] = 3;
75 linux  bash  shell 


9
使用Shell脚本在指定模式后将多行插入文件
我想使用Shell脚本在文件中插入多行。让我们考虑一下我的输入文件内容是: input.txt: abcd accd cdef line web 现在,我必须在input.txt文件中的'cdef'行之后插入四行。插入我的文件后,应更改为: abcd accd cdef line1 line2 line3 line4 line web 上面的插入我应该使用shell脚本来做。谁能帮我?
75 linux  bash  shell  sed  awk 

4
sed插入行,其中有到特定行的空格
我开头有一行,例如“ Hello world”。我想将此行插入文件中的特定行。例如,将“ hello world”插入下一个文件 hello world 结果: hello hello world world 我正在使用以下sed脚本: sed -i "${line} i ${text}" $file 问题是我在换行时没有空格: hello hello world world
75 linux  bash  sed 

2
带或不带美元的双括号
是$(...)一样(...)的击? 另外,$((...))与相同((...))吗? 另外,${...}与相同{...}吗? 一般来说,美元符号代表什么?谢谢。
75 bash 



6
将stdout捕获到变量,但仍将其显示在控制台中
我有一个bash脚本,它调用了几个长时间运行的进程。由于处理原因,我想将这些调用的输出捕获到变量中。但是,由于这些进程是长期运行的进程,因此我希望rsync调用的输出实时显示在控制台中,而不是事后显示。 为此,我找到了一种方法,但是它依赖于将文本输出到/ dev / stderr。我觉得输出到/ dev / stderr并不是一个好方法。 VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr) VAR2=$(rsync -r -t --out-format='%n%L' --delete -s /path/source1/ /path/target1 | tee /dev/stderr) VAR3=$(rsync -r -t --out-format='%n%L' --delete -s /path/source2/ /path/target2 | tee /dev/stderr) 在上面的示例中,我多次调用rsync,并且希望在处理文件时看到它们的名称,但是最后我仍然希望将输出包含在变量中,因为稍后将对其进行解析。 有没有一种“清洁”的方法来实现这一目标? 如果有所作为,我正在使用Ubuntu 12.04,bash 4.2.24。

4
如何打印/回显环境变量?
如何打印刚刚设置的环境变量? NAME=sam echo "$NAME" # empty 您可以在这里使用eval它。是这样吗 NAME=sam eval 'echo $NAME' # => sam
75 bash  eval 

8
检查Bash数组中是否存在元素[重复]
这个问题已经在这里有了答案: 检查Bash数组是否包含值 (37个答案) 5个月前关闭。 我想知道是否有一种有效的方法来检查Bash数组中是否存在元素?我正在寻找类似于Python的功能: arr = ['a','b','c','d'] if 'd' in arr: do your thing else: do something 我已经看到了针对Bash 4+使用针对bash的关联数组的解决方案,但是我想知道是否还有其他解决方案。 请理解,我知道微不足道的解决方案是在数组中进行迭代,但是我不希望这样。
75 arrays  bash  shell  search 


7
Shell脚本读取缺少的最后一行
我对bash shell脚本有一个奇怪的问题,我希望对此有所了解。 我的团队正在研究一种脚本,该脚本在文件中的各行之间进行迭代,并检查每个文件中的内容。我们有一个错误,即通过自动流程将不同的脚本排序在一起时,没有看到最后一行。 名称存储在文件中使用遍历行(代码DATAFILE为 cat "$DATAFILE" | while read line 我们可以从命令行运行脚本,它将看到文件中的每一行,包括最后一行,都很好。但是,当由自动化过程运行时(该过程运行的脚本恰好在所涉及的脚本之前运行了生成DATAFILE的脚本),则永远不会看到最后一行。 我们更新了代码,以使用以下代码遍历各行,并解决了问题: for line in `cat "$DATAFILE"` 注意:DATAFILE在文件末尾没有换行符。 我的问题分为两部分:为什么原始代码看不到最后一行,为什么会有所不同? 我只以为我可以提出为什么看不到最后一行的原因是: 上一个写入文件的过程依靠该过程结束以关闭文件描述符。 问题脚本启动和打开文件的速度足够快,尽管先前的进程已“结束”,但它没有“关闭/清理”足够多的系统来自动关闭文件描述符。 话虽这么说,如果您在Shell脚本中有2个命令,那么在脚本运行第二个命令时,第一个命令应完全关闭。 任何对问题的见解,特别是第一个问题,将不胜感激。
74 bash  process 

7
不要将当前的bash会话保存到历史记录
我注意到在打开时.bash_history它仅包含上一个会话的条目,似乎当前会话仅在退出时附加。有什么方法可以防止当前会话保存?bash如果知道如何崩溃,甚至可以选择崩溃。我发现可以进行kill -9此过程,但是如果有更好的方法,我想知道。
74 bash 

6
修复systemd服务203 / EXEC故障(无此类文件或目录)
我正在尝试设置一个简单的systemd计时器来每天午夜运行bash脚本。 systemctl --user status backup.service 失败并记录以下内容: backup.service: Failed at step EXEC spawning /home/user/.scripts/backup.sh: No such file or directory. backup.service: Main process exited, code=exited, status=203/EXEC Failed to start backup. backup.service: Unit entered failed state. backup.service: Failed with result 'exit-code'. 我迷路了,因为文件和目录存在。该脚本是可执行的,为了检查,我什至将权限设置为777。 一些背景: 在backup.timer和backup.service单元文件位于/home/user/.config/systemd/user。 backup.timer 已加载并处于活动状态,当前正在等待午夜。 看起来是这样的: [Unit] Description=Runs backup at 0000 [Timer] …
74 bash  systemd 

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.