Questions tagged «bash»

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

3
“子外壳”和“子进程”之间的确切区别是什么?
根据这个和这个,一个子shell通过使用括号开始(…)。 ( echo "Hello" ) 根据这个,这个和这个,当命令以& echo "Hello" & Posix规范在此页面中使用该词subshell,但未定义该词,并且在同一页面上也未定义“子进程”。 两者都使用内核fork()功能,对吗? 那么,将某些forks称为“ sub-shell”,而将另一些forks称为“子进程”,则有什么区别呢?
16 bash  shell  subshell 


7
有没有办法防止sed解释替换字符串?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 如果要使用sed将关键字替换为字符串,sed会尝试解释您的替换字符串。如果替换字符串碰巧包含sed认为特殊的字符(例如'/'字符),则它将失败,除非您当然是要让替换字符串包含告诉sed如何操作的字符。 例如: VAR="hi/" sed "s/KEYWORD/$VAR/g" somefile 有没有办法告诉sed不要尝试解释特殊字符的替换字符串?我想要的是能够用变量的内容替换文件中的关键字,无论该内容是什么。
16 bash  shell-script  sed 

1
``watch ps aux |工作解决方案 grep foo`` [关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 watch ps aux | grep foo 不管用: bash: syntax error near unexpected token `}' 我该如何解决?还是有更好的方法?
16 bash  pipe  ps  watch 

6
回音模糊
我需要在屏幕上打印一些变量,但是我需要优先混淆前几个字符,我想知道bash中是否有一个echo命令,可以在将其打印到终端时混淆秘密值的前几个字符: echo 'secretvalue' ********lue
15 bash  security 

6
如果Bourne shell在发行版中不可用,则在hashbang中使用/ bin / sh是否正确?
通常,shell脚本在脚本文件的第一行包含以下注释:#!/bin/sh。根据我所做的研究,这称为“哈希爆炸”,这是常规注释。该注释通知Unix该文件由Bourne Shell在目录下执行/bin。 我的问题从这一点开始。到目前为止,我还没有看到这样的评论#!/bin/bash。一直如此#!/bin/sh。但是,Ubuntu发行版没有Bourne Shell程序。他们有Bourne Again Shell(bash)。 在这一点上,将注释#!/bin/sh放在用Ubuntu发行版编写的Shell脚本中是否正确?

7
如何检查是否可以在bash中创建文件或将其截断/覆盖?
用户使用文件路径调用我的脚本,该文件路径将在脚本中的某个点被创建或覆盖,例如foo.sh file.txt或foo.sh dir/file.txt。 创建或覆盖行为与将文件放在>输出重定向运算符右侧或将其作为参数传递给tee(实际上,将其作为参数传递给tee我的要求)非常相似。)。 在深入探讨脚本之前,我想进行一次合理的检查,以确定是否可以创建/覆盖文件,但实际上无法创建文件。此检查不一定是完美的,是的,我意识到情况可能会在检查和实际写入文件的位置之间发生变化-但在这里,我可以采用尽力而为的类型的解决方案,因此我可以尽早进行纾困如果文件路径无效。 无法创建文件的原因示例: 该文件包含目录组件,例如dir/file.txt但该目录dir不存在 用户在指定目录中没有写权限(如果未指定目录,则没有CWD 是的,我认识到“预先”检查权限不是UNIX Way™,而是我应该尝试操作并稍后再请求宽恕。但是,在我的特定脚本中,这会导致不良的用户体验,并且我无法更改负责任的组件。

4
全局别名化叉子炸弹会阻止其执行吗?
如果要全局设置 alias ':(){ :|:& };:'='echo fork bomb averted' 这将是避免执行Bash fork炸弹的有效安全策略,还是仍然有执行该炸弹的方法? 我想问题就变成了这样:当别名为其他东西时,是否有一种方法可以执行命令?
15 bash  security  alias 

2
bash中的双引号如何匹配(配对)?
我正在使用GNU bash 4.3.48。考虑以下两个仅相差一个美元符号的命令。 指令1: echo "(echo " * ")" 指令2: echo "$(echo " * ")" 它们的输出分别是 (echo test.txt ppcg.sh ) 和 * 因此很明显,在第一种情况下,*会出现问题,这意味着第一个引号与第二个引号形成一个对,而第三个和第四个引号形成另一个对。 在第二种情况下,*不会被混淆,并且输出中恰好有两个额外的空格,一个在星号之前,另一个在空格之后,这意味着第二个引号与第三个引号一起使用,第一个引号与第四个引号一起使用。 除了$()引号不与下一个引号匹配,而是嵌套的引号之外,还有其他情况吗?此行为是否已得到充分记录?如果是,我在哪里可以找到相应的文件?

8
如何在bash中测试数组元素是否全部相等?
以下数组表示每台Linux机器上的磁盘数 每个单个阵列都包括linux计算机上的磁盘数。 echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 识别所有数组值相等的简单方法是什么? 良好状态: 4 4 4 4 4 4 4 4 不良状态: 4 4 4 4 4 4 2 4 不良状态: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 




1
典型的炮弹“叉子炸弹”到底如何称呼自己两次?
在询问了Askubuntu和许多其他Stack Exchange网站上著名的Fork Bomb问题之后,我不太明白每个人都在说什么,这很明显。 许多答案(最佳示例)都这样说: “ {:|: &}表示运行功能:并将其输出:再次发送到功能” 好吧,确切的输出是:什么?传递给对方的是:什么? 并且: 本质上,您正在创建一个函数,该函数每次调用都会调用两次,并且无法终止自身。 两次执行的精确度如何?在我看来,:直到第一个:完成执行之前,任何内容都不会传递给第二个,实际上这将永远不会结束。 在C例如, foo() { foo(); foo(); // never executed } 第二个foo()根本不执行,只是因为第一个foo()永远不会结束。 我在想,同样的逻辑也适用于:(){ :|: & };:和 :(){ : & };: 做与 :(){ :|: & };: 请帮助我理解逻辑。

3
如何以目录为参数运行一个命令,然后将cd设置为同一个命令?我得到“没有这样的文件或目录”
我想构造一个简短的函数来执行以下操作。假设我将文件“ file.tex”移动到我的文档目录中: mv file.tex ~/Documents 然后,我想cd转到该目录: cd ~/Documents 我想将其推广到任何目录,以便可以执行以下操作: mv file.tex ~/Documents follow 并让该follow命令从上一个命令中读取目标,然后相应地执行。对于一个简单的目录,这不会节省太多时间,但是当使用嵌套目录时,仅使用 mv file.tex ~/Documents/folder1/subfolder1 follow 我认为这将是相对简单的,并且我可以做这样的事情: follow() { place=`history 2 | sed -n '1p;1q' | rev | cut -d ' ' -f1 | rev` cd $place } 但这似乎不起作用。如果我echo $place,我确实得到了所需的字符串(正在使用进行测试~/Documents),但是最后一条命令返回 No such file or directory 该目录肯定存在。我很茫然。你能帮我吗?
15 bash  cd-command 

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.