Questions tagged «bash»

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


5
为什么不对由$()中的命令打印的{1,2}进行插值?
我所在的目录中有两个文本文件: $ touch test1.txt $ touch test2.txt 当我尝试使用某种模式列出文件(使用Bash)时,它可以工作: $ ls test?.txt test1.txt test2.txt $ ls test{1,2}.txt test1.txt test2.txt 但是,当使用内含的命令生成模式时$(),只有一种模式有效: $ ls $(echo 'test?.txt') test1.txt test2.txt $ ls $(echo 'test{1,2}.txt') ls: cannot access test{1,2}.txt: No such file or directory 这里发生了什么?为什么该模式{1,2}不起作用?


3
回显tail命令会产生意外的输出?
此命令单独运行时,将产生预期的结果(crontab的最后一行): tail -n 1 /etc/crontab 但是,当我将其作为echo命令的一部分运行以将结果发送到文件时,它会添加工作目录中所有文件的摘要以及预期结果: sudo bash -c 'echo $(tail -n 1 /etc/crontab) > /path/to/file' 为什么此命令产生额外的数据?
8 bash  sudo  cron  echo  tail 

4
查看文件开始和结束的Bash方法
在基于队列的集群上,从命令(例如)显示待处理作业的队列showqueue。 该命令以列的形式返回诸如名称等合理数据的列表,但是列/数据对于该问题并不重要。 我喜欢使用的工具watch一样watch showqueue,有时(有一个别名alias watch="watch ",以力别名扩展我的命令来观看)。前几行有有价值的数据(正在运行的作业),然后是挂起的作业等,最后还有一些有价值的摘要。 但是,有时showqueue的输出不在屏幕上(我知道这真是难以置信)!理想情况下,我希望可以通过某种方式同时查看文件的开头和结尾。 到目前为止showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2,我最好的是:,并使用watch其别名。 有谁知道更灵活或更实用的东西?我的解决方案使用bash循环有点麻烦,可以使“ ...”中断多行显示,根本无法适应调整终端窗口的大小,而且我敢肯定,我还错过了更多东西。 有什么建议么?


5
在Bash数组上使用参数替换
我有要读入Bash数组的file.txt文件。然后,我需要删除空格,双引号以及每个条目中除第一个逗号以外的所有内容。这是我走了多远: $ cat file.txt 10,this 2 0 , i s 30,"all" 40,I 50,n,e,e,d,2 60",s e,e" $ cat script.sh #!/bin/bash readarray -t ARRAY<$1 ARRAY=( "${ARRAY[@]// /}" ) ARRAY=( "${ARRAY[@]//\"/}" ) for ELEMENT in "${ARRAY[@]}";do echo "|ELEMENT|$ELEMENT|" done $ ./script.sh file.txt |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| |ELEMENT|50,n,e,e,d,2| |ELEMENT|60,se,e| 除逗号情况外,哪种效果都很好。我知道有很多方法可以给这只猫换皮,但是由于这是其中较大的脚本,所以我真的很想使用参数替换到达此处: |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| …

2
bash别名即使使用shopt expand_aliases也不会扩展
我想在bash -c构造内运行别名。 该bash手册说: 如果外壳不是交互式的,则别名不会扩展,除非expand_aliases使用以下命令设置外壳选项shopt 在此示例中,为什么hi在expand_aliases显式设置时找不到别名? % bash -O expand_aliases -c "alias hi='echo hello'; alias; shopt expand_aliases; hi" alias hi='echo hello' expand_aliases on bash: hi: command not found 我在跑步GNU bash, version 5.0.0(1)-release (x86_64-pc-linux-gnu)。 上下文:我希望能够以空闲优先级运行别名,例如包含以下内容的脚本: #!/bin/bash exec chrt -i 0 nice -n 19 ionice -c 3 bash -c ". ~/.config/bash/aliases; shopt -s …
8 bash  alias 

2
如何从多个文本源的第一行创建数组?
我有一个指向文件的路径数组,每个文件都有多行文本。我想产生一个数组,其中填充了每个处理的文件的第一行,如下所示: # this.txt first line is [Test this] # another.txt first line is [Test another] paths=( ./this/path/this.txt ./another/path/another.txt ) for i in ${paths[@]}; do read -r line < $i lines+=$line done 最多我在数组中只得到一个值。我似乎无法从for循环中获取要查找的数组。我尝试了许多变体,并且很难弄清我要去哪里。

5
在>之后找不到exec'{}'不可用
Exec允许我们要么与一次传递所有参数,要么与{} +一对一传递它们{} \; 现在假设我想重命名所有jpeg,这样做没有问题: find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \; 但是,如果我需要重定向输出,'{}'重定向后将无法访问。 find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \; 这行不通。我必须使用for循环,在使用find之前将其输出存储到变量中。让我们承认,它很麻烦。 for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do …
8 bash  find 

2
在Bash脚本中被这个`find`命令混淆了吗?
我有一个bash脚本,该脚本由无法再解释其含义的人创建,用于自动对文件夹进行定位和备份。目前,我对最后一行感到困惑: find '/home/_backups/pokebrawl' -mtime +6 -type f -delete 完整脚本如下。 #!/bin/bash #Purpose = Backup of Important Data #Created on 17-1-2012 #Author = Hafiz Haider #Version 1.0 #START TIME=$(date +"%m-%d-%Y-%T") FILENAME=pokebrawl-$TIME.tar.gz SRCDIR=/home/servers/brawl/world DESDIR=/home/_backups/pokebrawl tar -cpzf $DESDIR/$FILENAME $SRCDIR find '/home/_backups/pokebrawl' -mtime +6 -type f -delete #END

1
生成参数序列以传递给程序?
我目前正在使用大括号和gloglo的组合来一次在vlc中播放多个文件: vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}* 但是数字总是全序列的,有没有办法以某种方式更简单地指定它,也许像 vlc K20-{06-17}* ?也许seq以某种方式使用? 我可以用 $ echo K20-{$(seq -s, -f "%02.0f" 06 17)}* K20-{06,07,08,09,10,11,12,13,14,15,16,17}* 但这似乎并没有扩大*。可以解决吗?
8 bash 

3
Shell:在if中使用带有参数的函数
我正在尝试执行以下代码,但是当我尝试在if语句中使用函数时,-bash: [: too many arguments出现错误。为什么会这样呢? 先感谢您! notContainsElement () { local e match="$1" shift for e; do [[ "$e" == "$match" ]] && return 1; done return 0 } list=( "pears" "apples" "bananas" "oranges" ) blacklist=( "oranges" "apples" ) docheck=1 for fruit in "${list[@]}" do if [ notContainsElement "$fruit" "${blacklist[@]}" -a …

3
使用$ RANDOM时,我的脚本会产生相同的输出
我试图打印一个随机n字母词,n从命令行本身输入,但是由于某种原因,每次使用相同的值时,我的脚本都会给我相同的答案n。 #!/bin/bash num=$1 egrep "^.{$num}$" /usr/share/dict/words | head -n $RANDOM| tail -n 1 我称我的脚本为: $ bash var3.sh 5 étude # always the same output when using 5 $ bash var3.sh 3 zoo # always the same output when using 3 var3.sh我的脚本的名称在哪里,我要随机打印的单词的长度为5。 如何获得一个真正随机的单词?
8 bash  random 

5
$ find -exec cd =>给出错误:=> find:'cd':没有这样的文件或目录
当我运行此命令时,它起作用: $ find . -inum 888696 -exec ls '{}' \; Conversation.pst Outlook Data File Outlook Data File.sbd Trash Unsent Messages Inbox.pst Outlook Data File.msf Sent.pst Trash.msf Unsent Messages.msf 然而,当更换ls与cd它不工作: $ find . -inum 888696 -exec cd '{}' \; find: ‘cd’: No such file or directory 我知道cd是一个bash内置的,所以我想这里面确实没有任何工作: $ find . -inum …
8 bash  find  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.