Questions tagged «bash»

Bash是来自GNU Project的类Unix操作系统的免费外壳。


1
控制台热键
在文本编辑器中,我喜欢使用热键:ctrl + arrow,ctrl + shift + arrow,ctrl + shift +(end | home)。 有没有办法在控制台中这样做? 我正在使用/ bin / bash,我知道它有很多其他的shell,但我知道它们什么都没有。
1 bash  console 

1
搞清楚我的/ etc /文件夹是如何删除的[关闭]
我sendmail在/etc/文件夹中玩我的配置,然后,不知何故,我的/etc/文件夹的内容消失了,我不确定如何。来自/var/log/auth.log: Nov 8 10:28:42 www sshd[25389]: pam_unix(sshd:session): session closed for user neubert Nov 8 10:28:42 www sshd[25389]: pam_mail(sshd:session): user unknown Nov 8 10:28:42 www sshd[25389]: pam_env(sshd:setcred): Unable to open env file: /etc/environment: No such file or directory Nov 8 10:28:42 www sshd[25389]: pam_env(sshd:setcred): No such user!? /root/.bash_history 也没有透露任何东西。 我能够从备份恢复,但我仍然想知道发生了什么。有任何想法吗?

0
在没有chroot的情况下伪造Linux环境
对于大学项目,我想在32核机器上测试C ++ 11程序。不幸的是,该机器安装了UCCntu 12.04并安装了GCC 4.6(由于一些C ++ 11线程功能,我们需要GCC 4.7)。在这样的环境中,我通常会使用自定义linux运行chroot(比如使用Ubuntu 12.10进行debootstrap)。由于我们没有在机器上获得root访问权限,因此我们无法使用chroot。 到目前为止,我已经为我们的代码使用debootstrap准备了一个运行时环境,我在debootstrap environemnt中编译了它。然后将其复制到服务器上(使用rsync)。为了运行我们的C ++代码,我将LD_LIBRARY_PATH设置为 export LD_LIBRARY_PATH=~/debootstrap/usr/lib/:~/debootstrap/lib64/:~/debootstrap/usr/lib/x86_64-linux-gnu/:~/debootstrap/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH 到目前为止,我们的代码似乎运行。但是我坚持使用我们的python代码。手动设置路径似乎不够。 export PYTHONPATH=~/debootstrap/usr/lib/python2.7/dist-packages:~/debootstrap/usr/lib/python2.7:~/debootstrap/usr/lib/python2.7/plat-linux2:~/debootstrap/usr/lib/python2.7/lib-tk:~/debootstrap/usr/lib/python2.7/lib-dynload:~/debootstrap/usr/local/lib/python2.7/dist-packages:~/debootstrap/usr/lib/pymodules/python2.7:~/debootstrap/usr/lib/python2.7/dist-packages/PIL:~/debootstrap/usr/lib/python2.7/dist-packages/gtk-2.0:~/debootstrap/usr/lib/python2.7 执行我们的脚本导致 ImportError: No module named _path 有没有一种更简单的方法来完成“假” - chroot而不仅仅是覆盖和创建环境变量? 注意我需要python,因为我们创建了一个自定义的C ++ - Python模块来运行我们的测试。也许我应该从中提出两个问题。


1
bash路径全局匹配dotfiles和pwd中的parent
命令 $ chmod -R 700 ./.* 搜索并尝试chmod上面的文件和目录pwd。为什么? 预期结果:考虑pwd就是/home/user,我希望第一个.在./.*与被替换/home/user。然后我希望chmodrecursively(-R)适用于所有以dot(.*)开头的文件/home/user,所以:$ chmod -R 700 /home/user/.*all all。 我得到了一些错误: chmod: cannot access `./../otheruser/file': Permission denied 这是因为..比赛.*吗?
1 linux  bash 

1
for loop(f in * .txt)如果不存在* .txt文件则抛出错误
我有一个小的bash脚本,看起来像这样: #!/bin/sh for f in ./*.txt do f=$(basename $f) echo "Processing $f" scp somewhere mv $f done/`basename $f` done 这是完美的工作,但只要没有文件,它就会抛出这个错误:*.txt: No such file or directory 我想知道为什么它进入循环以及我怎么能这样做(如果可能没有新的?)

2
查找并替换sed中的排除个案
我试图sed在某个模式后添加一个字符串,但我想排除已经存在附加字符串的情况。 例如: "text.txt" Hello Bar Hello world! 如果我使用sed -i -e 's/Hello/Hello world!' text.txt第三行成为 Hello world! world! 但我想保持原样。 我找到了这个相关的问题,但并不是我的文件中的所有行都需要修改。 有人有这方面的食谱吗?
1 linux  bash  sed 

1
由crontab执行时不满足Bash条件
我有一个小脚本来启动fluidynth服务器,然后将它连接到我的rasberry上的midi设备(OS是raspbian stretch lite)。 echo "Starting" fluidsynth -is -a alsa --gain 3 /usr/share/sounds/sf2/Nice-Keys-B-Plus-JN1.4.sf2 & echo "Fluidsynth started" while true; do aconnect -o; if [[ $(aconnect -o ) = *FLUID* ]]; then break; fi; sleep 2; done aconnect 20:0 128:0 echo "Connected" 条件外的aconnect -o用于调试。 当我正常执行(./startup_fluid_synth.sh)时它工作正常:https://pastebin.com/kU0wDu3w 我的crontab -e说: @reboot /home/pi/startup_fluid_synth.sh >> /home/pi/fluid.log 现在当我重新启动pi时,脚本启动了,但是日志清楚地表明应该满足条件,但不是:https://pastebin.com/FnxMKBkF …

1
Grep与字符串比较:仅返回“高于”时间戳的行
我有一个电子邮件日志文件,记录电子邮件何时发出,以及谁。这被记录下来,所以有一个拉链和解压缩的日志文件混合使用一周左右。 我目前(成功)收回与特定电子邮件匹配的所有行 sudo find /var/log/exim4/ -type f -exec zgrep -i "foobar@gmail.com" "{}" \\; | sort 这让我收回发送给的所有电子邮件foobar@gmail.com。到现在为止还挺好。 我现在要做的是在特定时间之后发送所有电子邮件,无论收件人是谁。这应该很简单(我认为),因为所有日志文件行都以时间戳开头 - 它们具有以下格式: 2015-04-20 18:01:05 H=(fake.org) [180.108.175.57] F=<fake@fake.org> rejected RCPT <webmaster@charanga.com>: relay not permitted 2015-04-20 18:01:05 H=(fake.org) [180.108.175.57] F=<fake@fake.org> rejected RCPT <webmaster@charanga.com>: relay not permitted 2015-04-20 18:06:33 H=(bar.net) [111.176.77.1] F=<foo@bar.net> rejected RCPT <service@charanga.com>: relay …
1 bash  grep  zgrep 

1
当互联网或位置断开连接时,如何暂停复制操作。贝壳
好的。所以我有一些备份目录的可执行.sh文件。在这种情况下,开发目录。我有两台电脑。Mac(主计算机和Windows 7桌面)。由于我的Mac只有500 GB的存储空间,我想将数据备份到另一台计算机。我这是无线的。 为了实现这一点,我有一个shell脚本来检查我是否连接到main-pc / Users / Public /。我知道位置不安全,我会在几天内更改位置,但就目前而言,我只是希望它能够正常工作。 总的来说,脚本工作正常,它确保位置存在,如果我没有连接我已经设置安装计算机。它也正确地复制了一切。 除外,如果互联网突然失去连接,或者我与另一台计算机的连接中断(这种情况时不时发生)。当发生这种情况时,该位置突然不存在,并且它继续运行脚本,但什么都不做,只是做了类似的事情 x - > y位置不存在...... Blah blah blah。 我的问题是,我如何确保如果我失去连接,它只是暂停备份并等待直到位置连接?这甚至可能吗?我不能只是重新创建位置,因为我没有在本地存储它。 谢谢。(而且我意识到获得一个外部驱动器会更容易,但那有什么好玩的?) 我的脚本很长,但这是与备份有关的部分。 rm -r -v /Volumes/Users/Public/InfiniteBackups/Development cd /Volumes/Users/Public/InfiniteBackups mkdir Development cp -v -f -rip ~/Development/ /Volumes/Users/Public/InfiniteBackups/Development echo "Files have finished transferring" say "Files have finished transferring" exit 0 它不是最漂亮的脚本,但它有效。这是在OS X 10.8上。

1
su user以root身份执行命令
背景短: 运行使用的脚本时,notify-send "title" "message"预计会显示通知,但sudo ./script不会显示通知 在阅读并访问了许多页面之后,我发现运行我脚本的这部分(通知 - 发送部分)仍然可以通知用户。 问题: 因此测试这个su命令: su normal-user -c "echo $USER" root 为什么不回来 normal-user
1 linux  bash 

2
为什么这个bash脚本会在Ubuntu上给出错误而不是OSX
#!/usr/bin/env sh export $NODE_CONFIG_DIR=/Users/full/path/to/script/config cd /Users/full/path/to/script /usr/local/bin/node main 该脚本在OSX上本地运行(如果我调整本地环境的路径),但在Ubuntu上,我得到: ./mtf_runner.sh: 2: export: : bad variable name 我想使用cron运行脚本,需要设置NODE_CONFIG_DIR环境变量 此外,虽然该命令在cronOSX(10.8.5)上运行,但我确实将以下内容发送到我的本地邮件: line 2: export: `=/Users/myname/Node/Development/tennistracker/config': not a valid identifier 我已经读到这可能是由周围的空间引起的,=但绝对没有空间

0
获取bash history-complete-backwardwards / fowards和vi-mode以使用tmux
我在Ubuntu 12.04上使用bash,我的inputrc包含: "\e[A": history-search-backward "\e[B": history-search-forward set show-all-if-ambiguous on set completion-ignore-case on"" 为了我的历史完成 我还在bash_profile中将bash放入vi模式set -o vi。 我注意到当我运行tmux时,如果vi模式打开,tmux不会使用我的inputrc配置。如果我关闭vi模式,它会正常工作。有没有办法可以兼顾两者?
1 bash  tmux  inputrc 

1
Bash脚本和引用
我正在阅读几本关于bash脚本的书,并努力理解正确的引用和使用IFS。也许有人可以帮我一个涉及带引号的文件名的小例子。从命令行执行此操作,即使它们包含空格,也可以正确打印文件名: set - * for i in "$@"; do echo $i; done 这不起作用,因为它在空格处断开: set - `find . -name "*"` for i in "$@"; do echo $i; done 也不是: IFS=$'\0' set - `find . -name "*" -print0` for i in "$@"; do echo $i; done 使用IFS=$'\n'和的组合也不是-print。为什么这些都失败了? 以下也失败了,但在这种情况下它出错(“bash:意外令牌'do'附近的语法错误”)。为什么? IFS=$'\n' for i in …

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.