Questions tagged «bash»

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

4
每次“清除”时如何获取bashrc文件
这可能是一个坏主意。我思考的越多,我越意识到自己不应该这样做……但是我一直在尝试并失败,所以我真的想知道如何去做,即使这是一个坏主意。 我想要的是使bashrc文件在每次运行clear命令时都可获取。其原因完全是唯物主义的。当我获取bashrc时,我已经回显了系统信息,这对我来说很酷,我希望每次清除时都将其放在第一位。 我试图为它设置一些别名,clear但是我一直遇到无限循环。明显的解决方法是将别名更改为clear以外的其他名称,以便我可以在别名中运行clear命令而不会产生干扰,但是我经常键入clear,以至于此时它已经根深蒂固。我希望能够输入clear并使其清晰,并提供bashrc文件的来源。
13 bash  bashrc 

4
如何检查是否可以通过ssh登录服务器?
我有一个服务器列表: cat list.txt 10.10.10.10 servera 10.11.10.10 serverb 如何检查是否可以通过ssh登录到他们?我的意思是默认情况下,我应该能够通过ssh key auth ..登录,因此,简而言之,我需要一个解决方案,对list.txt中的行(服务器)进行排序,如下所示: 我可以通过ssh键登录的服务器 提示输入密码的服务器(当然密码是未知的。) 无法访问的服务器
13 bash  ssh 

2
如何根据旧定义重新定义bash函数?
有什么办法可以根据旧定义重新定义bash函数?例如,我想将以下代码块添加到函数的序言中command_not_found_handle (), # Check if $1 is instead a bash variable and print value if it is local VAL=$(eval echo \"\$$1\") if [ -n "$VAL" ] && [ $# -eq 1 ]; then echo "$1=$VAL" return $? fi 它当前在/etc/profile.d/PackageKit.sh中定义,并由bash启动脚本提供。 这样,我可以在命令提示符处通过简单地键入变量名称来查询环境变量的值(并且前提是不存在该名称的此类命令)。例如 user@hostname ~:$ LANG LANG=en_AU.utf8 我知道我可以复制并粘贴当前定义,然后在中添加自己的更改~/.bashrc,但是我正在寻找一种涉及代码重用的更优雅的方法。 也赞赏实现我的目标或代码改进/扩展的更好方法。
13 bash  function 


3
如何在bash函数中设置陷阱?
我可以trap在bash脚本中设置,但不能在bash函数中设置。 例如,source下面的代码run f,现在尝试Ctrl+ C,它没有被捕获! 如何trap在bash函数中设置? 4 trap ctrl_c INT 5 6 ctrl_c () { 7 echo "** Trapped CTRL-C" 8 } 9 10 11 f () { 12 for i in `seq 1 100`; do 13 sleep 1 14 echo -n "." 15 done 16 }
13 bash  trap 

3
定制bash shell:加粗/上色命令
在线上有许多教程/帖子(例如http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/)有关如何通过设置在bash中自定义提示的信息PS1。有没有一种方法可以自定义我键入的命令的颜色/粗体? 换句话说,举例来说,我想要一个绿色提示,一个粗体蓝色命令,然后以任何默认颜色输出。在下面的示例中,我已经知道如何joe>通过设置使“ ”显示为绿色,蓝色,粗体PS1。但是,有什么方法可以使我git status以粗体显示吗? joe> git status # On branch master # Your branch is ahead of 'origin/master' by 2 commits. # ...
13 bash  colors 

2
如何安全地将变量传递给启用了root的脚本?
这个问题是完全笼统的,不仅适用于我的情况,而且...我有一个小型busybox设备,希望非root用户能够使用root特权执行特定脚本。例如,类似以下这样$1的小脚本来启用DHCP,其中在cmdline(!!)上发送的唯一变量()是要发送的主机名: #!/bin/bash udhcpc -b -i eth0 -h $1 像这样运行udhcpc需要root用户访问权限,因此,我计划进行修改/etc/sudoers以包含此行: joe ALL = NOPASSWD: /path/to/enable_dhcp.sh 只需运行以下命令,即可使“ joe”轻松地以root特权运行该脚本: sudo /path/to/enable_dhcp.sh 而不是要求输入密码(这是我想要的,因为我希望joe能够编写此脚本)。 现在..我知道(或者至少我认为这样做),$1在可以轻松使用root特权运行的脚本中使用是一个可怕的想法,因为您可以向其中注入任何内容。 那么...解决此问题的最佳方法是什么?我如何让Joe用root特权执行我想做的事情,如何允许他传入变量(或者像使用环境变量那样有效地传递变量),同时又不对注入攻击敞开大门?

1
如何保护bash功能不被覆盖?
在bash外壳中,我们可以f使用 f(){ echo Hello; } 然后使用以下命令重新声明/覆盖它,没有任何错误或警告消息 f(){ echo Bye; } 我相信,有一种方法可以防止功能被这种方式覆盖。

1
bash扩展的glob-匹配不带前缀的文件
我正在尝试为fail2ban监狱匹配文件名-所以我只需要使用文件名遍历-而不是正则表达式或bash脚本。 我的/var/log/apache2目录包含以下文件: example.com.error.log db.example.com.error.log app1.example.com.error.log app2.example.com.error.log 我正在尝试创建一个glob来匹配以结尾的所有文件,.error.log 除了 db.example.error.log -这可能吗? 我已经尝试过了,!(db)*.error.log但这仍然匹配db.example.com.error.log。我猜的!()是没有字符匹配,从而允许*从文件名的开头进行匹配。 注意:appX添加新的日志文件时,我不需要扩展glob ,因此无法使用@()当前已知的非db文件名列表。 (背景:我想创建一个过滤器,禁止任何人在db.example.com 以外的任何域上请求任何phpMyAdmin URL )


3
[-t 1]检查什么?
我刚刚找到了一种从Windows zsh启动bashWindows 时启动的方法 https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/。 建议在的末尾添加以下代码.bashrc。 # Launch Zsh if [ -t 1 ]; then exec zsh fi 什么[ -t 1 ]意思 这是真的吗? 然后,我可以这样做吗? exec zsh
13 bash  shell  zsh  test 


2
在bash中的文件中执行原子写操作
通过庆典会后文件,这个问题,这一个它仍然不是很清楚,我哪能执行原子写入(追加)操作在bash文件。我有一个在多个实例中运行的脚本,有时必须将数据写入文件: echo "$RESULT" >> `pwd`/$TEMP_DIR/$OUT_FILE 如何使所有同时运行的脚本的所有写操作都变为原子文件(这样,一个实例中的数据不会与另一个实例中的数据重叠)?

2
Shell有效的函数名称字符
对于许多用户来说,使用扩展的Unicode字符是(毫无疑问)有用的。 更简单的shell(灰(busybox),破折号)和ksh会因以下原因而失败: tést() { echo 34; } tést 但是bash,mksh,lksh和zsh似乎允许这样做。 我知道POSIX 有效函数名称使用此Names定义。这意味着此正则表达式: [a-zA-Z_][a-zA-Z0-9_]* 但是,在第一个链接中还说: 一个实现可以允许函数名称中的其他字符作为扩展名。 问题是: 是否接受并记录了此文件? 哪里? 对于哪些壳(如果有)? 相关问题: 它可能在shell函数名称中使用特殊字符吗? 我对在函数名称中使用元字符(>)不感兴趣。 包含“-”的upstart和bash函数名称 我不认为运算符(减号“-”)应该是名称的一部分。
13 bash  shell  zsh  function 

2
有没有办法从google-chrome中的当前标签获取网址?
我曾经使用python命令在firefox上执行此操作,但是最近发生了一些变化,无法再获取URL! 使用Firefox的工具: #!/bin/bash current_tab_num () { python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/xxxxx.default/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nprint str(jdata["windows"][0]["selected"])' } current_tab_url () { sed -n "$(current_tab_num)p" <(python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/xxxxx.default/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nfor win in jdata.get("windows"):\n\tfor tab in win.get("tabs"):\n\t\ti = tab.get("index") - 1\n\t\tprint tab.get("entries")[i].get("url")') } current_tab_url 谁能告诉我如何在Firefox和/或Chrome中执行此操作? 注意:我不了解python,我只是在某个地方找到了这些命令,并在bash中使用了它们!

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.