Questions tagged «bash»

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


12
如何比较色差输出?
我想有条件地格式化Unix文件,我目前正在处理diff命令,并且想知道是否可以格式化文本文件。diff命令输出。 例: 匹配的值应显示为绿色。 不匹配的值应显示为红色。 假设我有两个文件file1,file2并且我的命令是diff file1 file2。 现在我想假设输出包含5个不匹配项,那么这些不匹配项应以红色显示。如何使用unix实现? 简而言之,“对于不匹配的值,将diff命令的输出颜色更改为红色”
18 bash  ksh  diff 

1
在命令行中将字符串`!23`替换为`docker`
我有一个带有参数的Maven命令: mvn test -Dcommon_password=!23foo 该命令正在执行为 mvn test -Dcommon_password=dockerfoo 即!23用代替docker。为什么会发生这种情况,我该如何避免呢?
17 bash 


2
“ $ {my_array [@] /#/-}”中的/#/-是什么类型的操作?
将数组转换为命令参数的可接受答案?使用以下Bash命令: command "${my_array[@]/#/-}" "$1" 我正试图弄清楚/#/-零件的作用。不幸的是,我不知道该怎么称呼,所以我很难找到任何文档。我浏览了有关阵列和一些网站的Bash手册页部分,但是找不到任何东西。
17 bash  array 

1
Bash脚本函数名称包含双冒号'::'
我今天遇到了一个Bash脚本,其中包含带有双冒号的函数名称::,例如file::write()和file::read()。我以前从未在Bash脚本中看到过这种语法,当我调用该脚本时,它运行得很好(令我惊讶)。 在系统上(和在线)上查看Bash的手册页后,我在文档中找不到支持此函数名语法的任何内容。例如,本节Shell Defined Functions将shell函数的语法定义为 function name [()] compound-command [redirection] 然后(在手册的其他地方)令牌name定义为 name A word consisting only of alphanumeric characters and underscores, and beginning with an alphabetic character or an underscore. Also referred to as an identifier. 没有任何提及函数名的双冒号语法。 到目前为止,我在此《Shell Style Guide》(请参阅小节Naming Conventions > Function Names)中找到了对此双冒号语法的唯一其他参考,该指南建议对“包”中的函数名使用双冒号语法-例如,mypackage::myfunction()。 函数名称的这种双冒号语法是Bash shell的合法功能,还是未公开的功能?如果合法,Bash手册中将其记录在哪里?我已经看了看,但是在手册中找不到任何有关它的信息。我发现最接近的是::在PATH环境变量中使用,将当前工作目录添加到搜索路径。 例 #!/bin/bash function abc::def() { …

2
反斜杠点是什么命令?
我安装的软件在个人资料中插入了以下内容: [ -s "$SOME_FILE" ] && \. "$SOME_FILE" 我知道dot .是的代名词source,所以我怀疑这只是在寻找文件,但是我从未见过\.。它还有其他作用吗? 编辑有关DV的内容:搜索“反斜杠点”会导致有关./调用可执行文件时的问题,并man source导致手册页\.不出现。我不知道还能尝试什么,因此是一个问题。 编辑2:查看相关问题 为什么用反斜杠启动shell命令 命令开头的反斜杠 为什么反斜杠阻止别名扩展 运行被别名遮盖的命令
17 bash 

2
使用echo将敏感数据传递到chpasswd是否安全?
我正在尝试使用批量设置一些用户帐户密码chpasswd。密码应随机生成并打印到stdout(我需要写下来或将它们放在密码存储区中),然后再传递到中chpasswd。 天真的,我会这样 { echo student1:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') echo student2:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') } | tee >(chpasswd) 但是,我担心将新密码作为命令行参数传递给echo,因为参数通常对中的其他用户可见ps -aux(尽管我从未看到中echo出现任何行ps)。 是否有其他方法可以在返回的密码前添加一个值,然后将其传递给chpasswd?

1
引用$(command $ arg)的正确方法是什么?
现在是解决困扰我多年的难题的时候了... 我不时遇到这个问题,并认为这是要走的路: $(comm "$(arg)") 并且认为我的观点得到了经验的大力支持。但是我不太确定了。Shellcheck也无法下定决心。两者都是: "$(dirname $0)"/stop.bash ^-- SC2086: Double quote to prevent globbing and word splitting. 和: $(dirname "$0")/stop.bash ^-- SC2046: Quote this to prevent word splitting. 背后的逻辑是什么? (这是Shellcheck 0.4.4版,顺便说一句。)


4
为什么默认情况下仍启用bash历史记录替换?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 去年关闭。 有人知道为什么默认情况下bash仍启用历史记录替换吗?我.bashrc已经加入set +H了很多年,但其他一些人仍被该功能所困扰。 鉴于几乎每个人都在使用具有复制粘贴功能的终端,并且使用readline库编译的bash 和默认情况下仅在交互式shell中启用了历史替换,是否真的有理由完全使用该功能?即使默认情况下所有外壳程序都禁用了此脚本,也不会破坏现有脚本。 如果您不知道为什么历史替换被破坏,请尝试以下操作: $ set +H # disable feature history substitution $ echo "WTF???!?!!?" WTF???!?!!? $ set -H # enable feature history substitution $ echo "WTF???!?!!?" echo WTF???echo WTF???!?!!? WTF???echo WTF???!?!!? (很明显,如果默认情况下所有脚本都禁用了该功能,并且存在在执行之前验证结果的功能,则该功能存在重大问题shopt -s histverify。) 也可以看看: 为什么感叹号`!`有时会使bash烦躁? 为什么Bash历史记录不记录此命令? 如何回响一声巨响! Bash:在同一行中的双引号之后,单引号内的历史记录扩展

3
意外令牌`fi`附近的语法错误
我不一定想要答案,但是如果有人可以指出一些文献或例子。我想弄清楚。 当我运行脚本时,收到错误消息: 意外令牌附近的语法错误 fi 我if通过在if语句中添加注释并在echo "$NAME"中显示名称来推断出问题出在我的语句中/etc/。 进行更改时,#从if和删除fi并添加#到 wc -c "$NAME",我收到上面列出的语法错误。;在此之间我添加了]。我也then没有解决地移到了下一行。 #!/bin/bash for NAME in /etc/* do if [ -r "$NAME" -af "$NAME" ] then wc -c "$NAME" fi done
17 bash 

2
从脚本外部抑制bash执行跟踪(设置-x)
我试图找到这个问题的答案,但到目前为止还没有运气: 我有一个运行其他脚本的脚本,其中许多其他脚本中都带有“ set -x”,这使它们可以打印执行的所有命令。我想摆脱它,但是如果任何脚本将错误消息发送到stderr,则保留信息。 所以我不能简单地写 ./script 2>/dev/null 另外,我没有编辑其他脚本的特权,因此无法手动更改set选项。 我正在考虑记录从stderr到单独文件的所有内容,并过滤掉跟踪命令,但是也许有更简单的方法吗?
17 bash  shell  set 

2
为什么在ssh shell中导出变量会打印导出的变量列表?
考虑一下: $ ssh localhost bash -c 'export foo=bar' terdon@localhost's password: declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" declare -x HOME="/home/terdon" declare -x LOGNAME="terdon" declare -x MAIL="/var/spool/mail/terdon" declare -x OLDPWD declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin" declare -x PWD="/home/terdon" declare -x SHELL="/bin/bash" declare -x SHLVL="2" declare -x SSH_CLIENT="::1 55858 22" declare -x SSH_CONNECTION="::1 55858 ::1 22" declare -x …
17 bash  ssh 

1
如何终止bash本身建立的TCP连接?
我曾经使用exec 3<>/dev/tcp/192.168.0.101/6435192.168.0.101:6435建立TCP连接。而且我已经收到并通过pipe命令发送了一些消息。 现在,我要终止TCP连接。但是,ss -anpet从中我可以看到bash本身保持了此连接,而没有派生子进程。 我试图将信号9和15发送到bash进程,但是如您所知,bash无法杀死自己。 因此,我可以在不终止正在使用的pt的情况下终止已建立的TCP连接(既不通过root杀死它也不发送Ctrl + D)吗?

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.