Questions tagged «bash»

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

4
Bash:在stdout中捕获/使用最后(或第N)行
询问 我用Bash。当我寻找文件时,通常会执行以下操作: find -name stackexchange.hs 通常结果将如下所示: /youre/the/man/now/dog/stackexchange.hs /you/are/no/longer/the/dog/dog/stackexchange.hs /this/is/the/file/i/want/stackexchange.hs 然后,我要执行以下操作之一: 选项1:在vim中打开结果列表中的最后一项。 选项2:在vim中的结果列表中打开第N个项目。 目前,我用鼠标剪切粘贴。这使我想到我的问题: 是否有一种轻松的单线方式来完成选项1和2?请注意,这是在find命令之后发生的。 有没有办法在某种bash向量/数组中从stdout捕获N行? 理想用法 $ find -name am_i_really_all_alone.txt ./borges/library/you_are_not_alone.txt ./borges/library/am_i_really_all_alone.txt $ vim (N) (语法和语义可能有所不同,但您明白了) 相似性 似乎有几个类似的问题。这是我的感知差异(我很乐意接受启发): “使用find命令打开找到的文件”重点在于创建一行以将文件名从中传送find到vim(或其他任何文件中)。就我而言,我想find先进行管道传输(可以这么说)。我的捕获/使用严格地发生在之后。 “重新使用Lind命令的最后一个输出”似乎很有效,但似乎只是重复执行该命令,并不代表捕获第N行输出。坦白说,这吓到我了。 “捕获内置Bash的多行输出”很接近,但还不完全是。 “终端,外壳,tty,控制台等之间的确切区别是什么?” 这真的只是一本好书。 谢谢您的帮助!在90年代少年时代使用* nix / BSD并打电话给倦怠的酸头邻居吓坏了,以帮助我为即插即用声卡安装驱动程序后,我对讨论命令感到欣慰,与(不太可能)令人恐惧的个人保持联系。回来感觉很好。

7
如何将变量用作数组名称的一部分
我有两个数组: arrayA=(1 2 3) arrayB=(a b c) 我想使用命令行参数打印其中一个,即不带任何一个if else。 我尝试了几种语法变化,但均未成功。我想做这样的事情: ARG="$1" echo ${array${ARG}[@]} 但出现“不良替代”错误。我该如何实现?
11 bash  shell 

2
脚本出现问题,文件名中带有空格
我有一个脚本,该脚本将来自远程主机的文件压缩回本地。有时文件名包含空格。scp不喜欢其文件名中的空格。由于某种原因,我尝试处理空间的结果未产生正确的scp路径。 码: PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg scp $PATH Me@10.1.10.33:/Users/Me/Desktop 结果是 Cannot find directory: var/root/Documents/MyFile Cannot find directory: OG-v1.2.3.pkg 将PATH括在引号中"$PATH"会产生相同的错误。 将空间交换为逃逸空间也不起作用,尽管据我所知应该这样: ESC_PATH=${PATH/' '/'\ '} 尽管打印转义的路径表明编辑有效: echo $ESC_PATH > /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
为什么不能通过击键杀死Bash脚本调用的超时?
[编辑:这看起来与其他一些问题类似,询问如何杀死所有产生的进程-答案似乎都是使用pkill。因此,我的问题的核心可能是:是否可以将Ctrl-C / Z传播到脚本生成的所有进程?] 当rec使用timeout来自coreutils 的命令调用SoX 时(这里已讨论),一旦从Bash脚本中调用它,似乎没有任何办法可以通过击键杀死它。 例子: timeout 10 rec test.wav ...可以用bash中的Ctrl+ C或Ctrl+ 杀死Z,但不能从脚本内部调用。 timeout 10 ping nowhere ...可以被杀死Ctrl+ C或Ctrl+ Z从庆典,并与Ctrl+ Z当它在脚本中运行。 我可以找到进程ID并以这种方式将其杀死,但是为什么不能使用标准的击键动作呢?并且有什么方法可以构造我的脚本,以便可以吗?

2
创建bash完成脚本以等号后自动完成路径?
我想创建一个bash完成脚本,该脚本可以识别形式为--arg和的参数--some-arg=file。 在阅读了本教程和中的一些示例之后/usr/share/bash_completion/completions/,我编写了以下脚本(以节省使用Chromium键入一些标志的时间): _chromium() { local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" # Some interesting options opts=" --disable-web-security --easy-off-store-extension-install --incognito --load-extension= --pack-extension= --pack-extension-key= --user-data-dir= " # Handle --xxxxxx=file if [[ ${cur} == "--"*"=" ]] ; then # Removed failures (is my logic OK?) return 0 fi # Handle other options if …

2
阅读历史
如何read通过按向上/向下键在内置命令支持历史记录中循环显示它们? 当您按向上键时,我尝试捕获,但是它似乎不适用于read: read -p '> ' -n 3 foo echo echo -n "$foo" | hexdump 按下箭头键似乎可以工作,并且可以使用它来检测到它,但是如果按下aa↑,它将失败,因为它将仅读取向上箭头标识符的第一个字符,而需要使用第三个字符来区分不同的箭头键。

5
在从curl到sh的管道传输之前,请阅读并确认Shell脚本(curl -s [url] | sh)
每当需要从Web执行shell脚本时curl -s [url] | sh,我都会先url在Web浏览器中打开以确保该脚本不是恶意的并且可以安全运行。 我记得曾经看到过一个命令行技巧,可以从命令行读取脚本,然后在读取脚本后确认执行。如果我没记错的话,它看起来像curl -s [url] | something...here | sh,不需要任何软件。 有人知道这个把戏吗?

2
两个不同的/ etc / hosts取决于时间
我正在尝试为自己准备一套生产力套件。我的第一个目标是将Facebook,Gmail和Stackexchange从0900阻止到1600。 截至目前,我已经编辑了我的文件/etc/hosts,并为Gmail和stackexchange添加了0.0.0.0 www.facebook.com和类似的文件。 但是我对如何在脚本中包含阻塞持续时间感到困惑。 我以为有2个不同的文件(hosts_allow,hosts_block),然后cp hosts_allow hosts或者cp hosts_block hosts根据时间而定,但是随后需要将其置于无限循环中,或者我不太确定这是解决问题的最佳方法。 有什么线索吗?
11 bash  hosts 

2
$(目录名`readlink -f $ 0`)中的异常行为
当我以普通用户身份运行以下命令时,一切都很好: $(dirname `readlink -f $0`) 但是切换到root之后,发生了以下错误: readlink: invalid option -- 'b' Try `readlink --help' for more information. dirname: missing operand Try `dirname --help' for more information. 有任何想法吗?我尝试了都运行bash shell的本地Fedora 16和Amazon EC2。 编辑插图。 抱歉,我在这里没有进一步说明问题。这是场景: 使用普通用户帐户: $ pwd /home/myuser $ export MY_DIR=$(dirname `readlink -f $0`) $ echo MY_DIR /home/myuser 使用root: # pwd /root …
11 bash 

3
两个命令,一个管道
我需要这两个命令是一个(让我可以再管他们): dig +nottlid -t any bix.hu | egrep -v "^;;|^;|^$" | sort dig +nottlid -t any www.bix.hu | egrep -v "^;;|^;|^$" | sort 我的意思是我需要将这两个命令的输出放在一个管道中: $ dig +nottlid -t any bix.hu | egrep -v "^;;|^;|^$" | sort bix.hu. IN A 193.239.149.1 bix.hu. IN MX 10 deneb.iszt.hu. bix.hu. IN NS ns.iszt.hu. bix.hu. …
11 bash  dns 

4
如何限制命令输出在bash中可用的行数?
我开始使用后台下载一个大文件 $ nohup wget http://example.tld/big.iso & 这也给了我一个nohup.out包含的输出的文件wget。 现在,如果以后要观看下载过程,可以使用,$ tail -f nohup.out但是填充终端窗口的速度比我期望的要快。我想看到的是最后一行不断更新(就像wget单独使用时一样)。 我尝试过,$ tail -n 1 -f nohup.out但似乎只影响最初的拖尾。 一般来说,如果可以限制(在这种情况下为1)命令输出具有可用/可见的行数,则可以解决此问题。将输出保存在循环缓冲区中的某种方式–只需考虑正常的进度条即可$ wget example.tld/big.iso打印。 有这样的解决方案吗? 还是我以错误的方式爬树?(意味着,限制nohup输出或执行其他操作会更容易吗?)
11 bash  tail  nohup  stdout 

2
循环输出管道可防止局部变量修改
我正在尝试编写一个简单的bash函数,该函数将许多文件和/或目录作为其参数。这应该: 完全限定文件名。 对它们进行排序。 删除重复项。 打印所有实际存在的内容。 返回不存在的文件数。 我有一个脚本,几乎可以执行我想要的操作,但是无法进行排序。按原样返回脚本的返回值是正确的,但是输出不是(未排序和重复的)。如果我取消注释所示的| sort -u语句,则输出正确,但返回值始终为0。 注意:欢迎使用更简单的解决方案来解决问题,但问题实际上是为什么在我的代码中会发生这种情况。也就是说,为什么添加管道似乎停止脚本增加变量的作用r? 这是脚本: function uniqfile { local r=0 for arg in "$@" do readlink -e "$arg" || (( ++r )) done #| sort -u ## remove that comment return $r }

6
如何在这里禁用emacs文件补全
当使用emacs编辑bash脚本文件并尝试输入时<<<,在第二个<emacs处插入一个here文档模板,如以下示例所示: <<EOF EOF 这不是所需的输出,因为我将输入一个literal <<<。 目前< < <,我倾向于输入,然后删除空格,但我更喜欢被允许直接输入。

4
如何在bash中找到两个字符串的重叠部分?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Unix&Linux Stack Exchange 的主题。 5年前关闭。 我有两个琴弦。为了示例,它们的设置如下: string1="test toast" string2="test test" 我想要的是找到从字符串开头开始的重叠。在上面的示例中,重叠是指字符串“ test t”。 # I look for the command command "$string1" "$string2" # that outputs: "test t" 如果字符串是字符串,string1="atest toast"; string2="test test"则从开始检查开始,以“ a”开头,则它们将没有重叠string1。

2
使BASH的Tab完成第一场比赛吗?
当我按TAB时,有什么方法可以使BASH填写第一个匹配项,有点像Windows命令提示符? (它仍应显示匹配项列表,但当我继续按Tab时应循环显示这些匹配项。) 也就是说,这里的目标是在有足够的按动的情况下,仅用 TAB键即可填写任何匹配项-例如在Windows中。

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.