Questions tagged «bash»

Bash(Bourne-Again SHell)是默认情况下在Ubuntu命令行界面中使用的shell。

4
条件失败时如何停止bash脚本?
在这里显示了使用||和&&在一行中连接命令的执行:如何在bash脚本中检查apt-get错误? 如果某个条件失败,我试图停止执行脚本, 例如 false || echo "Obvious error because its false on left" && exit 它在这里打印Obvious error because its false on the left并退出我想要的控制台。 true || echo "This shouldn't print" && exit 在这里,没有回显打印,但是exit命令也运行了,即,控制台已关闭,exit由于未执行右侧的echo命令,该命令不应该不运行吗?还是默认情况下,&&运算符左侧的语句被认为是错误的? 编辑:我之前应该提到它,我的目的是回显错误,如果不清楚,则退出。对于我使用&&和||分组条件时捕获错误的特定情况,@ bodhi.zazen答案解决了该问题。 @takatakatek的答案使您对流量控制更加清楚,bash指南链接也非常出色 @muru答案很好地解释了为什么不使用set -e如果您希望通过使用perl和trap的替代方法抛出自定义错误消息,我认为这是更可靠的方法,并且从第二个bash脚本开始就可以使用它!

2
批量重命名目录以将年份从结尾移到开头
我目前正在处理一些音乐文件夹。我曾经决定按照以下模式命名它们:artist - album - year。今天我意识到这并不是一个聪明的举动,现在想按照以下模式命名目录:year - artist - album因为目录列出后它们将以升序显示。 我开始手动重命名,但是大约有700个文件夹,必须有一种更简单的方法;我尝试使用,gprename但是我不太擅长正则表达式和bash脚本... 有谁能帮助我摆脱可怜的指尖? 一些例子: Aes Dana - Memory Shell - 2004 Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009 会成为 2004 - Aes Dana - Memory Shell 2009 - Anja Schneider & GummiHz - Back To Back …


5
如何使用Shell脚本将文本文件中的值打印到列文件中
我从运行shell脚本得到的output.txt如下: abc.txt errorstatus1 Fri Nov 11 02:00:09 2016 def.txt errorstatus2.txt Sat Nov 12 03:00:09 2016 文本文件以相同的方式逐行具有多个条目。我想将这些值打印到列中:Filename,Status和Timestamp,如下所示: Filename Status Timestamp abc.txt errorstatus1 Fri Nov 11 02:00:09 2016 def.txt errorstatus2 Sat Nov 12 03:00:09 2016

3
仅将字符串的一部分分配给bash中的变量
我从用户收到一定绝对的文件路径,我想创建一个变量,会不会只包括一个字符串FIRST文件路径的两个组成部分,但是没有打印出来或任何东西。 例如,绝对路径可以是: /home/myusername/folder1/folder2/folder3 它保存在“ target_path”中,我希望“ mydir”只能是: /folder1/folder2/folder3 我尝试以不同的方式使用cut命令,但没有成功。

2
Gnome终端中是否有命令,或者任何可打开标签的外壳程序中都有打开新标签页的命令?
我不是在寻找键盘快捷键,而是想要以下命令: 新窗户 新标签 关闭当前标签页或窗口 最大化外壳窗口 最小化外壳窗口 将Shell移到其他工作空间 切换标签 基本上像这样。记得; 我不想要快捷方式,而是想要实际的命令。这样做的原因是我可以利用别名功能。

3
rm在命令行上工作,但不在脚本中工作
当我rm *.old.*在命令行上执行时,它会正确删除,但是当我在脚本的以下部分中执行此操作时,它不会保留所有*.old.*文件。 我的bash脚本出了什么问题: for i in ./*; do if [[ -f $i ]]; then if [[ $i == *.old.* ]]; then oldfile=$i echo "this file is to be removed: $oldfile" rm $oldfile exec 2>errorfile if [ -s $errorfile ] then echo "rm failed" else echo "removed $oldfile!" fi else echo …
11 bash  scripts  rm 

2
ls [13]和ls {1,3}有什么区别?
我使用命令在目录中创建了三个文件touch inv{1..3}.txt。现在,我使用了两个命令,它们的输出几乎相同。这两个命令是ls inv[13].txt和ls {1,3}.txt。 那么这两个有何不同?方括号与括号相比有何不同?我也一直在搜索“ linux [..]”,但是找不到任何东西,所以我能知道在Linux术语中这些东西是什么吗? 谢谢

2
如何传递带有空格作为参数的文件名?
我有一个接受字符串参数的Python脚本。 $ python script.py "one image.jpg" "another image.jpg" 这按预期工作。 Python argparse: ["one image.jpg", "another image.jpg"] 如果我需要传递文件名, $ python script.py $(ls "/some/dir/*.jpg") Python argparse: ["one", "image.jpg", "another", "image.jpg"] 如果使用-Qof ls命令,我可以将结果用双引号引起来。但是,引号在Python脚本中即转义。 $ python script.py $(ls -Q "/some/dir/*.jpg") Python argparse: ['"one image.jpg"', '"another image.jpg"'] 如何将ls文件名扩展为适当的字符串以用作参数?(如我的第一个示例)

2
.desktop文件的Exec =行中的时间戳可能吗?
Lubuntu 16.04-Openbox会议 我可以使用终端打开带有时间戳的文件gedit: gedit ~/$(date +%Y%m%d%H%M%S).txt 也可以通过Openbox中的键盘快捷键使用该命令。 <keybind key="W-4"> # gedit time-stamped file <action name="Execute"><command>sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'</command></action> </keybind> 但是我不能通过文件Exec=行来做同样的事情.desktop。 Exec=sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt' 只是创建一个名为 ~/.txt 那么,如何获取.desktop文件来执行我想要的操作?
11 bash  .desktop 

4
具有更好的编辑功能的Shell
Shell(至少我所知道的)具有非常差的命令编辑功能。 例如: 我无法将光标指向命令的任何点。 我无法在命令中选择和退格/删除/替换文本。 目前,这些命令分散了我的注意力,我在将命令粘贴到终端之前使用gedit编辑命令。 有没有适合这些的解决方案?

3
意外令牌'('附近的语法错误
当我在Ubuntu终端中使用以下代码时,它可以正常工作: rm !(*.sh) -rf 但是,如果我将相同的行代码放在外壳程序脚本(clean.sh)中并从终端运行外壳程序脚本,则会引发错误: clean.sh脚本: #!/bin/bash rm !(*.sh) -rf 我得到的错误: ./clean.sh: line 2: syntax error near unexpected token `(' ./clean.sh: line 2: `rm !(*.sh) -rf' 你能帮我吗?

2
如何停止和移除Docker容器?
我正在尝试删除docker / image / container以及以某种方式与docker连接的所有东西,但首先我需要停止它。当我尝试执行此命令时: docker stop $(docker ps -a -q) 它给我一个错误: [:/home/imran] 1 $ docker stop $(docker ps -a -q) 2015/01/16 00:37:38 Get http:///var/run/docker.sock/v1.14/containers/json?all=1: dial unix /var/run/docker.sock: permission denied Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] Stop a running container by sending SIGTERM and then SIGKILL after a grace period …

4
tr:将撇号转换为ASCII
我想一个转换右单引号一个撇号使用tr。 tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b 给定一个名为UTF-8编码的文件a,其中包含以下示例: We’re not a different species “All alone?” Jeth mentioned. OS X使用BSD tr并产生不错的结果: We're not a different species “All alone?” Jeth mentioned. Ubuntu使用GNU tr并产生以下讨厌的结果: We'''re not a different species ''<9C>All alone?''<9D> Jeth mentioned. 如何在Ubuntu中完成此转换?
11 bash  unicode  utf-8 

4
我可以使用cd ../ ..作为别名吗?
我同时使用Windows和Ubuntu,并且在两者上都做控制台操作。 在Windows上,我可以 C:\Users\Thomas>cd..\.. C:\> 但是,在Linux上,无论是反斜杠还是正斜杠都不起作用。 21:17:10 $ cd../.. bash: cd../..: No such file or directory 由于我经常犯该错误,因此我尝试.bash_aliases为这种情况定义一个别名: alias cd../..='cd ../..' alias cd..\..='cd ../..' 当我开始新的bash时,我得到 21:16:26 $ bash bash: alias: `cd../..': invalid alias name 我将如何设置了别名cd..\..和cd../..正确? 在cd..\..似乎与转义字符的问题: 21:39:43 $ cd..\.. bash: cd....: command not found 即使我为定义了另一个别名,它也不起作用cd....。
11 bash  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.