Questions tagged «bash»

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


6
Bash运算符[[vs [vs(vs((??
对于在bash中使用这些运算符(括号,双括号,括号和双括号)有何不同之处,我有些困惑。 [[ , [ , ( , (( 我见过人们在if语句上使用它们,例如: if [[condition]] if [condition] if ((condition)) if (condition)
243 bash  shell  test 

8
如何测试变量是否为空或仅包含空格?
以下bash语法验证是否param不为空: [[ ! -z $param ]] 例如: param="" [[ ! -z $param ]] && echo "I am not zero" 没有输出,它的罚款。 但是,当param一个(或多个)空格字符为空时,情况就不同了: param=" " # one space [[ ! -z $param ]] && echo "I am not zero" 输出“我不为零”。 如何更改测试以将仅包含空格字符的变量视为空?

5
env x ='(){:;};是什么?命令” bash做,为什么它不安全?
bash中显然存在一个漏洞(CVE-2014-6271):Bash特制的环境变量代码注入攻击 我试图弄清楚正在发生什么,但是我不确定我是否完全理解。如何echo使用单引号将其执行? $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test 编辑1:修补的系统如下所示: $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" bash: warning: x: ignoring function definition attempt bash: error importing function definition for `x' …

5
为什么我的Bash脚本无法识别别名?
在我的~/.bashrc文件中包含两个定义: commandA,这是较长路径的别名 commandB,它是Bash脚本的别名 我想使用这两个命令处理相同的文件,因此我编写了以下Bash脚本: #!/bin/bash for file in "$@" do commandA $file commandB $file done 即使注销了会话并重新登录后,command not found运行该脚本时,Bash也会提示我两个命令都出错。 我究竟做错了什么?
216 bash  alias 


3
忘记在bash / POSIX shell中引用变量的安全隐患
如果您已经关注unix.stackexchange.com一段时间了,那么您现在应该希望知道,echo $var在Bourne / POSIX shell(zsh是例外)的列表上下文中(如)在列表上下文中不加引号的变量具有非常特殊的含义,并且除非您有充分的理由,否则不应该这样做。 在此处的许多问答中对此进行了详细讨论(示例:为什么我的shell脚本为什么在空格或其他特殊字符上感到窒息?,何时需要双引号?,shell变量的扩展以及glob对其的影响和split,引用vs无引号的字符串扩展) 自从70年代末Bourne shell首次发布以来就是这种情况,但Korn shell(David Korn的最大遗憾之一(问题#7))并没有改变它,或者bash主要是复制了Korn shell,这就是POSIX / Unix如何指定的。 现在,我们仍然在这里看到许多答案,甚至偶尔看到一些不引用变量的公开发布的shell代码。您可能以为人们现在已经学到了。 根据我的经验,主要有3种类型的人忽略了引用其变量: 初学者。可以原谅这是完全不直观的语法。这是我们在此站点上进行教育的职责。 健忘的人。 甚至在反复敲打之后仍然没有被说服的人,他们认为Bourne shell的作者肯定不打算让我们引用所有变量。 如果我们暴露与此类行为相关的风险,也许我们可以说服他们。 如果忘记引用变量,最糟糕的事情莫过于发生。真的那么糟糕吗? 我们在这里谈论什么样的漏洞? 在什么情况下会出现问题?


9
如何在另一个bash会话中查看正在运行的进程的输出?
从本地工作开始,我就已经在远程计算机上运行了一个脚本。我可以以同一用户的身份通过SSH连接到计算机,并查看中运行的脚本ps。 $ ps aux | grep ipcheck myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh 它只是在本地会话上输出到stdout(我从./ipchecker.sh本地终端窗口运行,不重定向,不使用screen等)。 无论如何,SSH会话中是否可以查看此正在运行的命令的输出(而无需停止它)? 到目前为止,我发现最好的方法是使用它,strace -p 18386但是我在屏幕上飞走了成群的文本,其内容过于详尽。我可以停下来strace,然后在输出中进行筛选,然后找到将文本打印到stdout的内容,但它又长又令人困惑,很显然,在停止时我可能会错过一些东西。我想找到一种方法来实时查看脚本输出,就像在本地工作一样。 任何人都可以对此进行改进吗?显而易见的答案是通过重定向或在screen会话等中重新启动脚本,这不是关键任务脚本,因此我可以这样做。相反,我认为这是一个有趣的学习练习。



7
终端提示未正确包装
我有一个问题,如果我在bash中输入很长的命令,终端将无法正确显示我键入的内容。我希望如果我有如下命令: username@someserver ~/somepath $ ssh -i /path/to/private/key myusername@something.someserver.com 该命令应在两行上呈现。相反,它通常会环绕起来并开始在提示的顶部进行书写,如下所示: myreallylongusername@something.somelongserver.comh -i /path/to/private/key 如果我决定返回并更改一些参数,则无法确定光标将出现在哪里,有时在提示的中间,但通常在我键入的位置的那一行上。 当我Up执行上一个命令时,会带来更多乐趣。我已经在gnome-terminal和Terminator以及i3和Cinnamon上进行了尝试。有人建议这是我的提示,所以这里是: \[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\] Ctrll,,reset和clear都按照他们说的去做,但是当我重新输入命令时,还是Up发生了同样的事情。 我检查并checkwinsize启用了bash。这发生在80x24和其他窗口尺寸上。 这只是我学会生活的东西吗?我应该知道一些魔术吗?我已经同意只使用一个很短的提示,但这不能解决问题。
170 bash  terminal  prompt 

12
如何更改多个文件的扩展名?
我想将文件扩展名从更改*.txt为*.text。我尝试使用该basename命令,但是在更改多个文件时遇到了麻烦。 这是我的代码: files=`ls -1 *.txt` for x in $files do mv $x "`basename $files .txt`.text" done 我收到此错误: basename: too many arguments Try basename --help' for more information


6
运行被别名遮盖的命令
假设我在bash中具有以下别名alias ls='ls --color=auto'--我想ls不带选项地调用普通对象。唯一的方法就是取消别名,先执行命令,然后再次别名吗?还是有一些漂亮的技巧或解决方法?
163 bash  shell  alias 

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.