小编Myk*_*III的帖子

使用()和$()执行一系列命令的区别

我目前正在尝试制作一个脚本来创建字节,这些字节将作为输入传输到 netcat。

这是脚本的想法:

(perl -e "print \"$BYTES\x00\";

cat file;

perl -e "print \"More bytes\"x16 . \"\r\n\"";) | netcat ip port
Run Code Online (Sandbox Code Playgroud)

我尝试使用 subshel​​l 和命令替换(例如使用 $())来执行命令。但是我不明白为什么使用命令替换时脚本的输出是错误的。我怀疑在执行多个命令时,命令替换会错误地管道输出。有人可以向我解释为什么会这样吗?

编辑

这是使用命令替换的变体:

$(perl -e "print \"$BYTES\x00\";

cat file;

perl -e "print \"More bytes\"x16 . \"\r\n\"";) | netcat ip port
Run Code Online (Sandbox Code Playgroud)

shell pipe shell-script command-substitution

13
推荐指数
2
解决办法
3264
查看次数

将子shell置于后台与将命令置于后台

我有两个 bash 脚本尝试检查已启动的主机:

脚本 1:

#!/bin/bash 
for ip in {1..254}; do
    ping -c 1 192.168.1.$ip | grep "bytes from" | cut -d" " -f 4 | cut -d ":" -f 1 &
done
Run Code Online (Sandbox Code Playgroud)

脚本2:

#!/bin/bash 
for ip in {1..254}; do
    host=192.168.1.$ip
    (ping -c 1 $host > /dev/null 
    if [ "$?" = 0 ]
    then 
        echo $host
    fi) &
done
Run Code Online (Sandbox Code Playgroud)

当我检查大范围时,我想并行处理每个 ping 命令。但是,由于资源限制,我的第二个脚本似乎没有重试失败的分叉尝试。这导致第二个脚本的结果不一致,而我的第一个脚本尽管有时都无法分叉,但仍给出了恒定的结果。谁可以给我解释一下这个?还有无论如何要重试失败的分叉吗?

bash shell-script fork subshell

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

shell-script ×2

bash ×1

command-substitution ×1

fork ×1

pipe ×1

shell ×1

subshell ×1