Questions tagged «bash»

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

2
程序如何输出到STDOUT / STDERR以外的其他位置?如何避免呢?
显然,我不知道所有可供使用的输出目标。我知道stdout(&1)和stderr(&2)。但是,在重定向两个描述符之后,有时我的控制台中仍然会输出一些输出! 我能想到的最简单的例子是GNU Parallel。每次使用它,我都会看到一个引用通知。即使我这样做&2>1 > file,我仍然会看到通知。 这同样适用于emerge:当我运行emerge并且存在一些问题时,某些信息不会被打印到stdoutnor上stdin,因为我将它们重定向并且仍然可以通过。 我主要使用来解决这些问题script,但我仍然想知道是什么导致了此问题。

1
exec和tee到日志文件:解释这些bash命令
我在bash脚本文件的顶部看到了这个: export LOGFILE=$LOGDIRECTORY/${SCRIPT_NAME}.log exec > >(tee $LOGFILE) exec 2>&1 它有什么作用?这两个执行程序在做什么?我意识到保持这样,脚本执行的所有输出都通过管道传递给了$LOGFILE我,但我想从exec语句的角度来理解。
15 bash 

6
使用“保留”代码获取shell脚本的退出状态
最近,我从《高级Bash脚本指南》中发现了具有特殊含义的退出代码列表。他们将这些代码称为保留代码,并建议: 根据上表,退出代码1-2、126-165和255具有特殊含义,因此对于用户指定的退出参数应避免使用。 前一段时间,我编写了一个脚本,该脚本使用以下退出状态代码: 0-成功 1-错误的主机名 2-指定了无效的参数 3-用户权限不足 当我编写脚本时,我不知道任何特殊的退出代码,因此我只是从第一个错误条件的1开始,然后为每种连续的错误类型增加了退出状态。 我编写该脚本的目的是,在以后的阶段可以被其他脚本调用(可以检查非零退出代码)。我实际上还没有这样做;到目前为止,我只从交互式外壳程序(Bash)运行脚本,并且我想知道使用自定义退出代码可能导致什么/是否有问题。《高级Bash脚本指南》中的建议的相关性/重要性如何? 我在Bash文档中找不到任何确凿的建议;它的“ 退出状态”部分仅列出了Bash使用的退出代码,但未声明保留其中任何一个或警告您不要将其用于自己的脚本/程序。

3
如何读取破折号文件
我如何从终端读取破折号文件,而不是使用 ./ 例如阅读一个- file我们可以通过阅读 cat ./-file_name 问:有没有其他方法可以实现同一目标?
15 bash  cat 

3
生成-找不到命令!
我正在使用Mac OS X 10.9.4,以下是我的脚本,用于将文件从本地计算机复制到其他主机 #!/bin/bash #!/usr/bin/expect echo "I will fail if you give junk values!!" echo " " echo "Enter file name: " read filePath echo " " echo "Where you want to copy?" echo "Enter" echo "1. if Host1" echo "2. if Host2" echo "3. if Host3" read choice …

3
bash脚本中的“ 1 >>”和“ 2 >>”是什么意思?
我有以下bash脚本,据我了解>>用于将命令的输出附加到现有文件而不是覆盖,但是在这种情况下该怎么办?该脚本正在调用某些exe文件,以将一种格式转换为另一种格式。每个文件都有很多年,因此它通过查看文件名遍历每个文件。另外,当我运行此脚本时,我会得到“歧义重定向” #!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data='/mnt/' pth_rst='/mnt/' while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 …

5
如何测试某项是否在bash数组中?
帮助一个简单的脚本 #!/bin/bash array1=( prova1 prova2 slack64 ) a="slack64" b="ab" if [ $a = $b ] then echo "$a = $b : a is equal to b" else echo "$a = $b: a is not equal to b" fi 这个脚本根本行不通,我想要一个脚本来检查列表中是否存在slack64(我使用数组),然后简单地给我,是存在还是不存在。我不知道如何比较具有单个变量的数组。
15 bash  array 

3
当前会话的bash历史记录
也许我忽略了一些事情,但是有没有办法像您正在使用的当前会话那样获取您当前的bash历史记录 如果我跑 ssh host $ pwd $ ls $ cd /tmp 我只想看那三个命令,别无其他

2
具有位置参数的Bash -c
通常,$0在脚本中将其设置为脚本的名称,或设置为脚本的名称(包括路径)。但是,如果我使用bash该-c选项,$0则设置为命令字符串后传递的第一个参数: bash -c 'echo $0 ' foo bar # foo 实际上,位置参数似乎已移动,但包含$0。但是shift在命令字符串中不受影响$0(正常情况下): bash -c 'echo $0; shift; echo $0 ' foo bar # foo # foo 为什么对于命令字符串来说这看起来很奇怪?请注意,我在寻找实现这种奇怪行为的原因和理由。 可以推测这样的命令字符串将不需要$0通常定义的参数,因此出于经济考虑,它也用于常规参数。但是,在那种情况下,的行为shift是奇怪的。另一种可能性是$0用于定义程序的行为(bash称为sh或vim称为la vi),但不能如此,因为$0这里仅在命令字符串中可见,而在命令字符串中不可见。我无法想到的其他用途$0,因此我无所适从。
15 bash 

4
递归遍历目录中的文件
通过以下方式可以轻松地递归遍历目录中的文件: find . -type f -exec bar {} \; 但是,上述方法不适用于更复杂的事情,在这些事情中,需要完成许多条件分支,循环等。我曾经在上面使用它: while read line; do [...]; done < <(find . -type f) 但是,这似乎不适用于包含晦涩字符的文件: $ touch $'a\nb' $ find . -type f ./a?b 有没有替代方法可以很好地处理此类晦涩的字符?

3
如何设置历史记录召回的命令数
我正在使用bash。要浏览我的命令历史记录,我正在调用该history命令,我相信它正在调用同名的Gnu程序。(我不知道是否有更好的bash特定方式)。 在我的.bashrc中,我当前有一行export PROMPT_COMMAND='history -a'可以保存我正在运行的多个bash会话中的历史记录。 如果我进行历史记录,那么我目前仅看到524个条目。这是可配置的吗?我想将其增加到更大的数量,例如2000。

5
当系统空闲时再次运行时运行命令
我想在用户变为非活动状态(系统处于空闲状态)时运行命令。例如: echo "You started to be inactive." 同样,当用户再次活动时(系统不再处于空闲状态): echo "You started to be active, again." 我需要一个可以执行此操作的shell脚本。没有计时器/间隔就可以吗?也许一些系统事件?
15 linux  bash  shell 


1
执行功能参数提供的命令
我试图在bash脚本中创建一个函数方法,该函数方法执行由参数提供给该方法的命令。 意思是这样的: special_execute() { # Some code # Here's the point where the command gets executed $@ # More code } special_execute echo "abc" 我已经尝试过我$@,"$@",$*,"$*"我怎么能这样做呢?

3
何时在Shell脚本中使用重定向到stderr
我知道行为良好的实用程序,例如grep,会将“正常”消息输出到stdout,将错误消息输出到stderr。 $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory 当我自己编写shell脚本时,我经常发现很难决定应该在stderr上显示什么输出和哪些消息,或者是否应该打扰。 我想了解一种良好的做法:什么时候将某些消息重定向到stderr是合理的,什么时候不可行? 当然,“取决于情况”,但是您是否有一些见解可以帮助我做出这些决定? 为了使这个主观问题适合格式,我想鼓励回答“为什么”的答案,并以经验为基础,并在可能的情况下以事实为依据。

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.