Questions tagged «bash»

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

4
如何打开终端,拆分为9个终端并使用一个脚本在它们之间切换?
我想打开一个终端,将其拆分成可以说的9个部分(3x3),然后执行一些bash脚本。但是对于每个终端部分,不同的脚本。 可以使用perl,python甚至bash来完成吗? 如何在不使用键盘快捷键的情况下在这些小终端之间切换? 哦,顺便说一句,我正在使用terminator。如果还有其他支持这种功能的终端仿真器,那是什么?

3
如果条件出现括号,为什么没有空格时出现语法错误?
我使用下面的脚本将脚本从一年的开始两天开始运行时向后移动两天,并且还检查每个月的第一天和第二天并向后移动两天。 if [$month="01"] && [$day="01"]; then date="$last_month/$yes_day/$last_year" fulldate="$last_month/$yes_day/$last_year" else if [$month="01"] && [$day="02"]; then date="$last_month/$yes_day/$last_year" fulldate="$last_month/$yes_day/$last_year" else if [ $day = "01" ]; then date="$last_month/$yes_day/$year" fulldate="$year$last_month$yes_day" else if [ $day = "02" ]; then date="$last_month/$yes_day/$year" fulldate="$year$last_month$yes_day" else date="$month/$yes_day/$year" fulldate="$year$month$yes_day" fi fi fi fi 但我不好得到以下错误消息 Etime_script.sh: line 19: [06=01]: command not …

7
如何打开grep生成的文件?
我经常grep一堆文件来查找一行,然后grep返回一个结果。与其将文件名复制并粘贴到新命令中,我希望能够使用编辑器打开该结果。类似于:grep foo | vim。有没有办法在BASH中做到这一点?
17 bash  grep 

3
新的tmux会话不提供bashrc文件
摘要 当我创建一个新的tmux会话时,我的提示从默认的bash配置中拉出,我必须手动运行source ~/.bashrc我的自定义提示。 分析 我正在使用RHEL 7机器。经过一段时间的bash更新后,我开始注意到这种行为,但是直到现在才开始提出这个问题(并且不确定是哪个更新开始发生)。 例如,我已自定义提示,如下所示: [user@hostname ~]$ 每当我开始一个新的tmux会话时,它都会使用bash的默认值: -sh-4.2$ 快速运行source ~/.bashrc总是可以解决该问题,但是每次我想修复一些小问题时都必须这样做,这很烦人。关于如何使tmux再次自动执行此操作的任何想法? 如果需要更多信息,我很乐意提供。 tmux.conf 作为参考,我在tmux.conf下面提供了我的文件,尽管这几乎不能称为“自定义”。 setw -g mode-keys vi # reload tmux.conf bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
17 bash  tmux 


3
采购Bash脚本-返回错误,而不是退出?
我正在终端中采购bash脚本,因此出现错误时退出 set -o errexit 杀死我的终端,这是非常烦人的,因为我必须关闭终端,再打开另一个终端,并重置一些变量。 到目前为止,使用 command || return 脚本中的行完全按照我想要的做 set -o errexit 要做...但是我希望整个脚本都完成;不只是一行/命令 我有一个完整的命令文件来设置站点,我宁愿不执行命令||。返回 对于文件中的每一行 是否还有另一个设置选项,或者只是“返回”而不退出终端的其他选项? - 为了清楚起见,我想终止脚本,并使终端保持与按ctrl + C终止在终端中运行的服务相同的状态。command || return做到这一点。但我不想继续|| return处理文件中的每一行。所以我正在寻找与相似的东西set -o errexit,但不会导致终端关闭 ---注意: 创建一个包含两行的哑脚本(super.sh): create_path=~/Desktop/site_builder/create.sh source $create_path blah 然后放在set -o errexitcreate.sh的顶部, 完全按照我的预期工作。但是,必须创建一个包含两行的文件,只是调用另一个bash脚本,而不是仅仅从终端调用它,这确实很愚蠢。g 这里有一些例子: 在super.sh中 #!/bin/bash create_path=~/Desktop/site_builder/create.sh source $create_path blah 在create.sh中 #!/bin/bash set -o errexit #line below …

3
将jq输出设置为Bash变量
我正在使用curl从这样的rest api获取JSON: content=$(curl -s -X GET -H "Header:Value" http://127.0.0.1:8200/etc) echo "${content}"| jq -r '.data.value' 产生我需要的价值。然而; 当我将上面的代码更改为如下所示时: content=$(curl -s -X GET -H "Header:Value" http://127.0.0.1:8200/etc) username=$(echo "${content}"| jq -r '.data.value') echo $username 什么都不产生。如何更改此设置,以便为用户名变量分配输出?
17 bash  curl  json  jq 

2
Alt-Left跳过单词在终端仿真器中不起作用
在上一份工作的Debian Wheezy机器上,我习惯了Alt + Left和Alt + Right来在活动命令行中的单词之间跳跃(以bash表示)。 但是,由于在家里,我已经升级到Jessie(Debian 8.0,测试分支),因此不再起作用:Alt-Left不会跳到上一个单词,而是打印类似D或的内容[D。OTOH,如果我打开ssh并连接到无头的Debian Wheezy,它的确运行良好。 此外,我刚刚在新工作中安装了Fedora 20,这里的行为是相同的。这适用于bash,csh和ksh(在下开始env -i),以及rxvt-unicode和xfce4-terminal,因此它必须在这些级别之外。 我应该在堆栈中的其他地方找到区别吗?

2
是否像在Emacs中一样在Bash中复制并设置标记?
我希望能够复制并粘贴到使用相同的键盘绑定中的Bash命令行的文本Emacs的默认情况下使用(即使用C-space了set-mark,M-w复制文本,C-y,M-y将其粘贴等)。 在GNU Bash的文件说,猛砸附带了一些默认设置了这些键绑定。 例如,C-y默认情况下,yanking()在我的终端上有效。但是,我无法使用set-mark和copy命令,并且默认情况下它们似乎未绑定到任何键。 通常,用户可以定义自己的键绑定的方法是将其添加到中.inputrc。因此,我查看并在文档中找到了以下bash函数,这些函数可以帮助我定义所需的类似于Emacs的行为(即set-markwith C-space和copywith M-w)。 copy-region-as-kill () 将区域中的文本复制到终止缓冲区,以便立即将其取消。默认情况下,此命令是未绑定的。 和 set-mark (C-@) 将标记设置到该点。如果提供了数字参数,则将标记设置到该位置。 如果我理解正确,则上面的意思copy-region-as-kill是默认情况下未绑定到任何键盘序列,而默认情况下set-mark已绑定C-@。 我C-@在终端上尝试过,但是我认为它不能运行,set-mark因为在移动光标时没有看到任何突出显示的文本。无论如何,我都尝试将键盘绑定(M-w和C-)添加到函数中copy-region-as-kill以及set-mark上面的函数 中.inputrc,然后使用进行重新加载C-x C-r,但这是行不通的。我知道我的其他条目还在.inputrc工作,因为我在其中定义了其他用户定义的键绑定。 我做错了什么吗?我有什么想念的吗?

2
为什么有些Unicode字符无法打印到我的终端上?
我正在使用Adobe Source Code Pro字体通过简单的终端运行Arch Linux。我的语言环境已正确设置为LANG=en_US.UTF-8。 我想将代表扑克牌的Unicode字符打印到我的终端上。我正在使用Wikipedia作参考。 卡套装的Unicode字符可以正常工作。例如,发行 $ printf "\u2660" 在屏幕上打印黑色的心。 但是,我在使用特定的纸牌时遇到了麻烦。发行 $ printf "\u1F0A1" 打印符号Ἂ1而不是黑桃🂡。怎么了 这个问题在多个终端(urxvt,xterm,白蚁)和我尝试过的每种字体(DejaVu,Inconsolata)上仍然存在。
16 bash  fonts  unicode  printf 

2
bash中的..] [foo []`是做什么的?为什么匹配`..`?
请看以下内容: $ echo .[].aliases[] .. $ echo .[].foo[] .. $ echo .[].[] .. $ echo .[].xyz[] .. $ echo .xyz[].xyz[] .xyz[].xyz[] $ echo .xyz[].[] .xyz[].[] 显然,这似乎有些混乱,但我不明白结果如何结合在一起。据我了解[]是一个空字符类。如果直观的话 它只匹配空字符串;在这种情况下,我希望bash能够完全复制,因为在此目录中没有与之匹配的东西,而且还与..aliases(在第一个示例中)匹配, 或一无所有;在这种情况下,我希望bash也会完全复制字符串。 这与GNU bash 4.4.23(1)版一起发布。
16 bash  shell  wildcards 

4
如何列出所有用户名和/或主目录?
我要列出计算机上的所有用户目录。通常,我会这样做: ls -l /home 但是我在一个脚本中使用它,该脚本将部署在其他计算机上,也许会在他们不称其为Home的计算机上(例如myHome)。所以我想将其概括为ls -l ~。但这只是列出我的用户家庭目录,而不是列出所有用户家庭目录名称(基本上,我想在计算机上获取用户名称的列表)。我该如何概括呢?

1
tar文件以日期为名称?
我正在尝试以日期和时间为名称的tar和gzip文件: date=$(date '+%d-%m-%Y_%H:%M:%S'); tar -zcf "$date".tar.gz repo/bin/ 但我回来了: tar (child): Cannot connect to 17-08-2017_21: resolve failed tar: Child returned status 128 tar: Error is not recoverable: exiting now 这里到底发生了什么,我该如何解决? tar是否试图像连接ip一样连接到名称?
16 bash  tar 

2
流程替代输出不正常
的 echo one; echo two > >(cat); echo three; 命令给出了意外的输出。 我读到以下内容:如何在bash中实现流程替换?以及许多其他有关Internet上的流程替换的文章,但不明白为什么它会以这种方式运行。 预期产量: one two three 实际输出: prompt$ echo one; echo two > >(cat); echo three; one three prompt$ two 另外,从我的角度来看,这两个命令应该等效,但它们不相同: ##### first command - the pipe is used. prompt$ seq 1 5 | cat 1 2 3 4 5 ##### …

8
如何计算文件中字节序列出现的次数?
我想计算某个字节序列在文件中发生了多少次。例如,我想找出该数字\0xdeadbeef在可执行文件中出现了多少次。现在我正在使用grep做到这一点: #/usr/bin/fish grep -c \Xef\Xbe\Xad\Xde my_executable_file (因为我的CPU是little-endian,所以这些字节以相反的顺序写入) 但是,我的方法存在两个问题: 这些\Xnn逃逸序列仅在鱼壳中起作用。 grep实际上是在计算包含我的幻数的行数。如果模式在同一行中出现两次,则只会计数一次。 有办法解决这些问题吗?我如何才能使这一衬板在Bash shell中运行并准确计算出文件中图案出现的次数?

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.