Articles of bash

保留bash参数中的引号

我正在做一个bash脚本,将打印并传递复杂的参数到另一个外部程序。 ./script -m root@hostname,root@hostname -o -q — 'uptime ; uname -a' 我如何打印原始参数: -m root@hostname,root@hostname -o -q — 'uptime ; uname -a' 使用$@和$*删除uptime ; uname -a的单引号uptime ; uname -a uptime ; uname -a这可能会导致不良的结果。 我的脚本不需要parsing每个参数。 我只需要打印/logging参数string,并将它们传递给另一个程序,完全如何给出它们。 我知道我可以用"'uptime ; uname -a'"这样的东西来避免引号,但我不能保证用户会这样做。

在纯bash中传递一个密码给ssh

我想通过一个bash脚本传递一个密码给ssh (是的,我知道有ssh密钥,我可以使用,但这不是我想要的)。 我发现一些使用expect解决scheme,但由于它不是一个标准的bash工具,我想知道如果我可以使用pipe道来做到这一点。 有人可以向我解释为什么像这样: echo "password\n" | ssh somehost.com 要么 ssh somehost.com <(echo "password\n") 不起作用? 有没有可能使其工作? 也许执行ssh作为一个不同的进程,获得其PID,然后直接发送一个string呢?

Bash – 如何在将stdoutredirect到文件时添加时间戳

我有一个程序(服务器),我正在寻找一种方式(脚本),将redirect(或更好地复制)其所有的stdout文件,并为每个条目添加时间戳。 我已经做了一些研究,最远的我可以得到感谢如何添加时间戳STDERRredirect 。 它redirectstdout但添加的时间戳是脚本结束的时间: #!/bin/bash ./server | ./predate.sh > log.txt predate.sh代码: #!/bin/bash while read line ; do echo "$(date): ${line}" done 我是一个Linux初学者,我显然错过了一些非常重要的东西,因为看起来服务器输出在程序退出后被刷新(没有redirect它工作正常)。 另外,如果我尝试使用predate.sh在给定的例子中提到的线程,它完美的作品。 我知道这很容易添加一个时间戳到主程序,但我宁愿避免编辑它的代码。 编辑:唯一的工作答案在评论

bash pid和$$之间的区别

我是一个bash脚本初学者,我有一个“功课”去做。 我想到了大部分的东西,但有一部分说,我必须呼应父bash的pid和我将要运行的两个子壳的pid。 所以我看了网上,发现这个(Linux文档项目) : #!/bin/bash4 echo "\$\$ outside of subshell = $$" # 9602 echo "\$BASH_SUBSHELL outside of subshell = $BASH_SUBSHELL" # 0 echo "\$BASHPID outside of subshell = $BASHPID" # 9602 echo ( echo "\$\$ inside of subshell = $$" # 9602 echo "\$BASH_SUBSHELL inside of subshell = $BASH_SUBSHELL" # 1 echo "\$BASHPID inside […]

为什么ps o / p列出pipe道后的grep进程?

当我做 $ ps -ef | grep cron 我明白了 root 1036 1 0 Jul28 ? 00:00:00 cron abc 21025 14334 0 19:15 pts/2 00:00:00 grep –color=auto cron 我的问题是为什么我看到第二行。 从我的理解, ps列出的进程和pipe道列表grep 。 grep甚至没有开始运行,而ps正在列出进程,那么如何将grep进程列在o / p? 相关第二个问题: 当我做 $ ps -ef | grep [c]ron 我只得到 root 1036 1 0 Jul28 ? 00:00:00 cron 第一次和第二次grep执行有什么区别?

如何将通配符parameter passing给bash文件

我试图编写一个bash脚本,允许用户使用通配符传递目录path。 例如, bash show_files.sh * 在这个目录下执行 drw-r–r– 2 root root 4.0K Sep 18 11:33 dir_a -rw-r–r– 1 root root 223 Sep 18 11:33 file_b.txt -rw-rw-r– 1 root root 106 Oct 18 15:48 file_c.sql 会输出: dir_a file_b.txt file_c.sql 它现在的方式是输出: dir_a show_files.sh内容: #!/bin/bash dirs="$1" for dir in $dirs do echo $dir done

串行端口环回/双工testing,在Bash或C? (过程替代)

我有一个串行设备设置为回送(这意味着它只会回显它收到的任何字符),我想测量有效的吞吐速度。 为此,我希望可以利用time time bash -c '…' 哪里“ … ”将是我可以运行的一些命令。 现在,第一个问题是我想用2000000 bps的设备,所以我不能使用ttylog或屏幕 (他们似乎只能达到115200 bps)。 但是,使用/dev/ttyUSB0作为文件(使用文件redirect和cat )似乎工作正常: # initialize serial port stty 2000000 -ixon icanon </dev/ttyUSB0 # check settings stty -a -F /dev/ttyUSB0 # in one terminal – read from serial port while (true) do cat -A /dev/ttyUSB0 ; done # in other terminal – write to […]

如何创build一个dynamicvariables并为其赋值?

我正在尝试创build一个dynamicvariables并将其分配给它 #!/bin/bash . . active_id=$p_val flag_$active_id=100 但是我这样做是错误的,有什么帮助?

创build新文件,但如果文件名已存在于bash中,则添加数字

我发现了类似的问题,但不是在Linux / Bash中 我想我的脚本创build一个给定名称的文件(通过用户input),但如果文件名已经存在,最后添加数字。 例: $ create somefile Created "somefile.ext" $ create somefile Created "somefile-2.ext" 谢谢阅读

如何从awk中的variables中裁减空白?

假设$ 2是我的variables。 我试过从 awk -F\, '{print $2 ":"}' 至 awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}' 但是从印刷到印刷什么都没有。