Questions tagged «bash»

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

2
我可以配置bash / readline自动将NBSP转换为正常空间吗?
我正在使用芬兰语键盘布局,该布局将AltGr+ 映射Space到不间断的空间(NBSP,U + 00A0)。总的来说,我对此感到满意,但是我发现在使用bash命令行时,我经常不小心在管道|符号“(用AltGr+ <用芬兰语键盘布局用+ 编写)” 之后写NBSP而不是普通空格。我猜这是由于我需要AltGr在输入管道时按住并在碰到空间之前将其释放而造成的。当我发布的时机不好时,AltGr我会在命令行中看到不正确的错字和错误消息,例如 grep: command not found 看起来很像 grep: command not found 这使得这个问题很难在第一时间注意到。 我知道我可以禁用NBSP,但是我更喜欢仅在管道字符之后禁用它(具有AltGr+ Space以产生常规空间),或者如果不可能,则始终在bash命令行或readline级别上禁用它。有什么简单的方法可以执行此操作而无需修改 bash的源代码readline或我的终端仿真器(gnome-terminal)? 另一个好的解决方案是将NBSP配置为在命令行上可见,例如,将其替换␣为仅用于呈现的另一个字符(例如U + 2423 )。

1
date -d'上一个星期一”以显示上一个星期一
与date -d可以显示未来或下一个日期 $ date -d "next mon" Mon May 13 00:00:00 CST 2019 $ date -d "mon" Mon May 13 00:00:00 CST 2019 不幸的是,它未能显示上一个工作日 $ date -d "previous Monday" date: invalid date ‘previous Monday’ 如何以字符串格式显示前一个工作日?
10 bash 

4
同时在文件夹中同时运行Bash脚本
假设我.sh在一个文件夹(my_folder)中有五个Bash()脚本,它们的名称如下: script_1.sh script_2.sh script_3.sh script_4.sh script_5.sh 我该如何编写第六个Bash脚本或仅编写一个可以一起运行所有这些脚本的划线器? 我需要五个脚本同时开始一起运行,而不是一个接一个地运行。
10 bash  scripts 

2
资料夹比较
我有两个文件夹具有相似的子文件夹结构,我想进行比较。例如: A ├── child-1 ├── child-2 ├── child-3 ├── child-4 ├── child-5 和 B ├── child-1-some-text ├── child-2-more-text ├── child-3-nothing ├── child-6-random-text ├── child-7-more-random-text 我想列出其中所有子文件夹A的前缀的所有那些子文件夹,B并列出相应的子文件夹B。预期的输出是 child-1 -- child-1-some-text child-2 -- child-2-more-text child-3 -- child-3-nothing 次要要求:如果中有多个匹配项B,则应该给出错误/警告。 我的解决方案: cd A for f in `ls -d */`; do cd B; new_dirs=(`ls -1d $f*`); …
10 bash  directory 

2
引用文件名是否足以运行`xargs sudo rm -rf`?
我编写了一个脚本,该脚本删除了文件夹中除最后两个文件以外的所有文件: #!/bin/bash ls -1 --quoting-style=shell-always /path/to/some/folder \ | head -n -2 \ | xargs printf -- "'/path/to/some/folder/%s'\n" \ | xargs sudo rm -rf 该脚本将每天作为cron作业执行。 理由如下: 使用获取所有文件的列表ls -1(这样我每行得到一个文件); 使用head -n -2; 从列表中删除最后两个。 由于ls打印相对路径,因此请使用xargs printf事物在文件夹路径之前加上前缀,并使其成为绝对路径; 将其发送给sudo rm -rf使用xargs。 每个人都可以访问此文件夹,因此任何人都可以创建和删除此文件夹中的任何文件。 问题是: sudo rm -rf很恐怖。xargs sudo rm -rf非常可怕。 我想确保没有人会通过创建聪明的文件来删除(意外或故意删除)而损坏其他文件夹/系统。我不知道,像这样的聪明东西: file with / spaces.txt 这可能会导致超级恐怖sudo …

5
是否只有在脚本运行时才显示图标?
我对脚本非常陌生。这是我编写的简单脚本(有效),经过5分钟后显示一个图像: sleep 300 && firefox file:///home/tasks/fiveminutes.jpg 这是我的问题:有时我不记得是否启动了计时器。有没有一种方法可以添加文本或图标指示(理想情况下在任务栏上,但在任何地方都不错),显示时间为5分钟(从启动计时器到结束计时器)? 非常感谢您的任何建议。
10 bash  scripts 

2
重命名文件时避免替换空格
我正在尝试重命名这样的文件: for file in *; do mv -i "$file" "$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')"; done 但是该sed命令将所有空格替换为_。 如何编辑sed命令以使其包含空格和指定的字符?我试过使用,\s但不起作用... 编辑: 例如:文件trip: hill,应重命名:trip_ hill,但是上面的命令使它成为trip__hill。


2
bash脚本:使用或不使用sudo调用时的结果不同
在Ubuntu 16.04.3中,我有一个非常简单的bash脚本: test.sh [[ 0 == 0 ]] && result="true" || result="false" echo $result echo $USER $SHELL $0 当我将其称为非root用户me或as时root,它将按预期工作。如果使用sudo ./test.sh,它将抱怨语法错误: $ ./test.sh true me /bin/bash ./test.sh $ sudo su # ./test.sh true root /bin/bash ./test.sh # exit $ sudo ./test.sh ./test.sh: 1: ./test.sh: [[: not found false root /bin/bash ./test.sh …
10 bash  scripts  sudo 

3
为什么不允许数字函数名称?
考虑以下: $ ksh -c '1(){ echo hi;};1' ksh: 1: invalid function name $ dash -c '1(){ echo hi;};1' dash: 1: Syntax error: Bad function name $ bash -c '1(){ echo hi;};1' bash: `1': not a valid identifier bash: 1: command not found $ mksh -c '1(){ echo hi;};1' hi 基本上,我试图声明函数1,0这将是true和的简写false,但是如您所见,我在函数中使用数字名称时遇到了问题。别名和两位数名称也会发生相同的行为。 …

3
bash中的[[]](括号中的感叹号)通配符
我遇到过通行模式和通配符,我特别感兴趣[!]。 此结构类似于该[!]结构,除了不匹配方括号内的任何字符,只要不在[和之间列出任何字符,它都将匹配任何字符]。 rm myfile [!192] 我相信以上内容将删除所有文件,但名称中包含192个文件的所有文件除外。 但是,我担心此扩展名是否正确使用,尤其是在多种情况下。 在这种情况下正确的语法是什么? rm myfile [!.gif .csv. mp3] 要么 rm myfile [!.gif !.csv !.mp3] 我担心的是,该时间段可能放错了位置,因此当我试图操纵特定文件时,任何带有.(肯定是其中的一个?)文件都会被操纵。 此结构类似于该[ ]结构,除了不匹配方括号内的任何字符,只要不在[和之间列出任何字符,它都将匹配任何字符]。 (引自http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm) 现在; 对我来说,暗示一个单数!就足够了,之后的所有值都包含在该范围内。

4
Ubuntu 17.04 — bash:cd:参数过多
我刚刚将Ubuntu 16.04升级到17.04,发现cd命令有点问题。 假设我有两个文件夹:album-01&album-02 在Ubuntu 16.04中,如果执行cd album*此操作,它将转到找到的第一个文件夹album-01 但是在新的Ubuntu 17.04中,如果执行cd album*此操作会导致我 -bash: cd: too many arguments cd像cd在Ubuntu 16.04中一样,如何在Ubuntu 17.04中进行制作?

2
使用bash将一系列IPv4地址转换为网络掩码
我有一个带有IPv4地址的输入文件: 94.228.16.0 - 94.228.25.255 94.241.136.0/24 94.241.136.0 - 94.241.136.255 94.29.128.0/17 94.29.128.0 - 94.29.191.0 94.29.192.0 - 94.29.255.0 94.74.181.0/24 94.74.181.0 - 94.74.181.31 94.74.181.128 - 94.74.181.255 如何将地址范围转换为网络掩码?结果应为: 94.228.16.0/21 94.241.136.0/24 94.241.136.0/24 94.29.128.0/17 94.29.128.0/19 94.29.192.0/19 94.74.181.0/24 94.74.181.0/27 94.74.181.128/25

2
使用一行命令重命名文件
我有此目录,并且想要重命名文件: ===> ls -1 Der-vierte-Weise/ 10 - 10 - Erkenntniss.ogg 1 - 01 - Hoffnung.ogg 11 - 11 - Wahrheit.ogg 12 - 12 - Dankbarkeit.ogg 13 - 13 - Kredits.ogg 2 - 02 - Familie.ogg 3 - 03 - Demut.ogg 4 - 04 - Freude.ogg 5 - 05 - Schoenheit.ogg …

1
从批次开始到批次结束下载YouTube视频,这是播放列表的一部分
您可以独立观看YouTube视频,也可以将其作为播放列表的一部分。 示例: https://www.youtube.com/watch?v = vbsNiOkm0BU 和 https://www.youtube.com/watch?v=vbsNiOkm0BU&index=141&list=UUmM7KPLEthAXiPVAgBF6rhA 注意零件vbsNiOkm0BU。 问题是要获取频道/播放列表的所有视频的这一部分。 动机是下载该频道的所有视频(大约3600)。但是我youtube-dl一次下载都没有成功。 因此,我希望以100个为一组的价格下载它。 如果我可以进一步解决这个问题,我可以编写一个bash脚本来仅下载播放列表的特定索引吗? 如果您看到上面的链接: https : //www.youtube.com/watch?v= vbsNiOkm0BU & index = 141 & list =UUmM7KPLEthAXiPVAgBF6rhA请注意该部分&index=141。 现在,如果做这样的事情: for i in {100..200} do youtube-dl https://www.youtube.com/watch?v=vbsNiOkm0BU&index=${i}&list=UUmM7KPLEthAXiPVAgBF6rhA done 注意零件&index=${i}。 由于,这一次又一次下载了同一视频vbsNiOkm0BU。 任何帮助,将不胜感激。谢谢。

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.