Questions tagged «bash»

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

4
为什么cut用bash而不是zsh失败?
我用制表符分隔的字段创建一个文件。 echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input 我的以下脚本名为 zsh.sh #!/usr/bin/env zsh while read line; do <<<$line cut -f 2 done < "$1" 我测试一下。 $ ./zsh.sh input bar bar 这很好。但是,当我将第一行更改为调用时bash,它将失败。 $ ./bash.sh input foo bar baz foo bar baz 为什么这会失败bash并起作用zsh? 其他疑难解答 在shebang中使用直接路径而不是env产生相同的行为。 用管道echo代替而不使用here-string <<<$line也会产生相同的行为。即echo $line | cut -f 2。 使用awk的,而不是cut 作品的两个壳。即<<<$line awk '{print …



3
PS1提示以显示经过的时间
我目前使用它在bash提示中显示当前时间: PS1=\[\e[0;32m\]\t \W>\[\e[1;37m\] 20:42:23 ~> 是否可以显示自上一个提示以来经过的时间?如: 00:00:00 ~> sleep 10 00:00:10 ~> sleep 20 00:00:20 ~> 这与是否有可能通过后台脚本定期更改PS1?
10 bash  prompt 

2
为什么while循环在被暂停后会停止?
为什么使用bash并暂停while循环,然后在恢复循环后停止循环?下面的简短示例。 $ while true; do echo .; sleep 1; done . . ^Z [1]+ Stopped sleep 1 $ fg sleep 1 $ 我熟悉信号,我猜这可能是bash的自然行为,但我想更好地理解为什么它会以这种特定方式运行。

3
每X秒执行一次命令
我希望每10秒执行一次命令,并使其在后台执行(因此消除了watch?)。所有答案均显示如下内容,但这将在11到14秒内执行。如何做到这一点? while true; do # perform command that takes between 1 and 4 seconds sleep 10 done


7
我怎样才能使脚本数到五?
我试图制作一个非常简单的bash脚本,以列出375和3500之间的所有5的倍数(375、380、385 ...)。我尝试但没有起作用的一件事是: for i in {375..3500} do echo $i (($i += 5)) done 一段时间后,我放弃了,并在15秒钟内用BASIC编写了此代码: 10 count = 375 20 print count 30 count = count+5 40 if count < 3500 then goto 20 如何在bash脚本中制作BASIC程序?
10 bash  shell  scripting 

1
用全局模式定义的变量替换Bash
以下示例说明了该问题。为什么FILENAME在使用替换时回显并被视为图案时打印正确? #!/bin/bash FILEPATH_WITH_GLOB="/home/user/file_*" FILENAME=$(basename "$FILEPATH_WITH_GLOB") echo $FILENAME #file_1234 echo ${FILENAME:1:5} #ile_* <---why is this not ile_1

1
OS X,bash:较少用于打开文件描述符,而cat不
在我正在使用的bash脚本中(必须在Ubuntu和OS X上运行),我需要将数百个命令的输出重定向到文件。 与其附加&>...到所有这些,不如做 exec 9>&1 exec 5<>/tmp/some-file.txt exec 1>&5 到目前为止,一切顺利,但是在所有这些命令的中间,我需要读取到目前为止已编写的所有内容,同时保持文件描述符处于打开状态。 现在,在Ubuntu上,我可以做 cat /dev/fd/5 要么 tee </dev/fd/5 但是在OS X上,什么也没打印(命令立即退出)。 但是,使用lessI可以看到两者的文件内容。 我可以通过使用以下命令来达到上述效果(在两个操作系统上均有效) less /dev/fd/5 | tee 但这似乎是一个hack。 那么,为什么less显然可以看到catOS X上无法显示的内容?(或者所有BSD后代都受到影响吗?) 还是我做错了什么?

1
在某些命令上跟踪某些参数
假设我有一个命令git branch(总是有几个单词)。 我要跟踪的是何时使用参数执行此命令。例如,如果我执行命令时git branch develop没有错误,我想保存develop在文件中。 我试图覆盖我的git命令.bash_profile,如下所示: git () { if [ $# -eq 3 ] then git $@ echo $2 > /path/tacked_parameters.txt else git $@ fi } 但是似乎效果不佳。有什么办法吗?
10 bash  shell  function 

1
防止在bash中多行粘贴
我经常使用ctrl+c鼠标右键单击菜单复制并粘贴某些gui应用程序中的文本,然后将其粘贴到终端仿真器(终止符)中。有时我忘记了剪贴板中包含几行,将其粘贴到bash中会导致每行被“执行” 有一些解决方案可以完全防止多行粘贴吗?

6
如何检查awk中是否存在文件?[-d'文件名']失败
我正在尝试生成具有不存在的主目录集的用户列表。看来我应该可以用awk做到这一点,但是我的语法有问题。 它总是在[]处告诉我“无效语法”。我究竟做错了什么? awk -F: '{ if(![ -d "$6"]){ print $1 " " $3 " " $7}}' /etc/passwd 我可能最终要使用的最终代码是: awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd 我在这里有一个相关的问题。
10 bash  awk  directory 

3
命令替换可以嵌套在变量替换中吗?
我想在通过命令访问的特定字符串上使用变量替换。例如,如果我将某些内容复制到剪贴板中,则可以这样访问它。 $ xclip -o -selection clipboard Here's a string I just copied. 如果将其分配给变量,则可以对其进行变量替换。 $ var=$(xclip -o -selection clipboard) $ echo $var Here's a string I just copied. $ echo ${var/copi/knott} Here's a string I just knotted. 但是,有没有办法在不将其分配给变量的情况下进行变量替换?从概念上讲,是这样的。 $ echo ${$(xclip -o -selection clipboard)/copi/knott} bash: ${$(xclip -o -selection clipboard)/copi/knott}: bad substitution …

3
用“读取”将脚本管道化为bash
我需要通过管道它运行一个脚本bash用wget(而不是直接使用bash运行它)。 $ wget -O - http://example.com/my-script.sh | bash 它不起作用,因为我的脚本中包含read语句。由于某些原因,在进行bash传输时这些命令不起作用: # Piping to bash works in general $ echo 'hi' hi $ echo "echo 'hi'" | bash hi # `read` works directly $ read -p "input: " var input: <prompt> # But not when piping - returns immediately $ echo 'read …
10 bash  shell  pipe  read 

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.