Questions tagged «bash»

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

6
如何使用Shell命令删除ascii文件的前n行?
我在前5-10行中包含多个包含ascii文本信息的文件,其后是格式良好的矩阵信息。在shell脚本中,我想删除文本的前几行,以便可以在另一个程序中使用纯矩阵信息。如何使用bash shell命令执行此操作? 如果有帮助,我正在使用RedHat和Ubuntu Linux系统。

4
多行Shell脚本注释-这是如何工作的?
最近,我偶然发现了以前从未见过的多行注释类型-这是一个脚本示例: echo a # : aaa : ddd # echo b 这似乎是可行的,甚至在vim语法方面也很突出。这种评论方式叫什么,如何找到有关它的更多信息?

6
混淆&&和||的使用 经营者
我浏览了一个/etc/rc.d/init.d/sendmail文件(我知道这几乎没用过,但是我正在学习考试),并且对&&和||操作符有些困惑。我已经阅读了可以在诸如以下语句中使用它们的地方: if [ test1 ] && [ test2 ]; then echo "both tests are true" elif [ test1 ] || [ test2 ]; then echo "one test is true" fi 但是,此脚本显示单行语句,例如: [ -z "$SMQUEUE" ] && SMQUEUE="QUEUE" [ -f /usr/sbin/sendmail ] || exit 0 这些似乎正在使用&&and ||运算符基于测试得出响应,但是我无法从这些运算符的这种特殊用法中提取文档。谁能解释在特定情况下这些工具的作用?

6
如何用bash加(减等)两个数字?
我可以阅读其中的数字和操作: echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op 但是后来我所有加法的尝试都失败了: case "$op" in "+") echo num1+num2;; "-") echo `num1-num2`;; esac 跑: First number please 1 Second mumber please 2 Operation? + 输出: num1+num2 ...要么... echo $num1+$num2;; # results in: 1+2 ...要么... echo …

4
我可以以某种方式在已经运行的prog1中添加“ && prog2”吗?
大多数shell提供某些功能,&&并;以某种方式链接命令的执行。但是,如果命令已经在运行,我还能根据第一个命令的结果以某种方式添加另一个要执行的命令吗? 说我跑了 $ /bin/myprog some output... 但我真的很想/bin/myprog && /usr/bin/mycleanup。我无法杀死myprog并重新启动一切,因为会浪费太多时间。我可以Ctrl+ Z和fg/(bg如有必要)。这是否允许我链接另一个命令? 我对bash最为感兴趣,但是欢迎所有常见shell的答案!
87 bash  shell  process  exit 

4
为什么带无引号的空格的参数扩展在双括号“ [[”内有效,而在单括号“ [”内无效?
我对使用单括号或双括号感到困惑。看下面的代码: dir="/home/mazimi/VirtualBox VMs" if [[ -d ${dir} ]]; then echo "yep" fi 尽管字符串包含空格,它仍可以完美地工作。但是当我将其更改为单括号时: dir="/home/mazimi/VirtualBox VMs" if [ -d ${dir} ]; then echo "yep" fi 它说: ./script.sh: line 5: [: /home/mazimi/VirtualBox: binary operator expected 当我将其更改为: dir="/home/mazimi/VirtualBox VMs" if [ -d "${dir}" ]; then echo "yep" fi 它工作正常。有人可以解释发生了什么吗?什么时候应该在变量周围"${var}"加上双引号,以防止空格引起问题?
86 bash  quoting  ksh  test 

4
将SIGTERM转发给Bash中的孩子
我有一个Bash脚本,看起来与此类似: #!/bin/bash echo "Doing some initial work...."; /bin/start/main/server --nodaemon 现在,如果运行脚本的bash shell收到SIGTERM信号,它也应该将SIGTERM发送到正在运行的服务器(该服务器会阻塞,因此无法进行陷阱)。那可能吗?
86 bash  shell  signals  docker 

7
不能在bash中使用感叹号(!)?
我正在尝试使用curl命令访问!其路径中带有感叹号()的http url 。例如: curl -v "http://example.org/!287s87asdjh2/somepath/someresource" 控制台会回复bash: ... event not found。 这里发生了什么?逃脱感叹号的正确语法是什么?


3
/etc/profile.d中的脚本做什么?
我正在从Linux Command Line和Shell Scripting Bible阅读有关基本Shell脚本的信息。 它说该/etc/profile文件在Bash shell启动时设置环境变量。该/etc/profile.d目录包含其他脚本,这些脚本包含特定于应用程序的启动文件,这些启动文件也由Shell在启动时执行。 如果这些文件/etc/profile对于Bash启动也很重要,为什么不包含这些文件? 如果这些文件是特定于应用程序的启动文件,对于Bash启动而言并不重要,那么为什么它们是启动过程的一部分?为什么它们不仅在执行包含它们的设置的特定应用程序时运行?
85 bash  profile  etc 

5
根据命令历史记录完成命令行
因此,我查看了历史记录和Ctrl+ R,但是它们不是我以为我知道的。有什么方法可以输入命令的开头,并通过一些bash快捷方式循环浏览历史记录中的匹配项? # mysq(some shortcut key) 给我: # mysqldump --add-drop-table -e -q -n -C -u (some shortcut key) # mysql -u ben.dauphinee -p

6
Bash历史记录:“ ignoredups”和“ erasedups”设置与跨会话的通用历史记录冲突
首先,这不是SE上任何现有线程的重复。我已经阅读了有关更好的bash历史的这两个线程(1st,2nd),但是没有一个答案有效--顺便说一下,我在Fedora 15上。 我将以下内容添加到.bashrc用户目录(/ home / aahan /)中的文件中,但它不起作用。有人知道吗? HISTCONTROL=ignoredups:erasedups # no duplicate entries HISTSIZE=1000 # custom history size HISTFILESIZE=100000 # custom history file size shopt -s histappend # append to history, don't overwrite it PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" # Save and reload the history after each command finishes …

9
如何永远以优雅的方式无所事事?
我有一个程序,可以在上产生有用的信息,stdout但也可以读取stdin。我想将其标准输出重定向到文件,而不在标准输入上提供任何内容。到目前为止,一切都很好:我可以做到: program > output 而且不要在tty中做任何事情。 但是,问题是我想在后台执行此操作。如果我做: program > output & 程序将被挂起(“暂停(tty输入)”)。 如果我做: program < /dev/null > output & 该程序立即终止,因为它达到了EOF。 似乎我需要的是插入program不确定的时间内不做任何事情并且不读取的内容stdin。以下方法起作用: while true; do sleep 100; done | program > output & mkfifo fifo && cat fifo | program > output & tail -f /dev/null | program > output & 但是,这一切都非常丑陋。有有是一种优雅的方式,使用标准的Unix工具,到“什么都不做,无限期”(意译man …

3
在脚本中包含$“美元符号前缀的字符串”是什么意思?
我刚刚在初始化脚本中看到了这一点: echo $"Stopping Apache" 那美元符号是做什么用的? 到目前为止,我的研究: 我在bash手册中发现了这一点: 引号 如果设置,$'string'并且$"string"加引号内执行${parameter}双引号括起来的扩展。默认情况下启用此选项。 ...但是我没有发现带有和不带有$前缀的字符串之间的任何区别: $ echo "I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in ${PWD}" I am in /var/shared/home/southworth/qed $ echo "I am in ${PWD}" I am in /var/shared/home/southworth/qed …


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.