Linux 在后台运行时的awk输出

Linux 在后台运行时的awk输出,linux,bash,awk,Linux,Bash,Awk,我想知道为什么awk在后台运行时打印不同的输出 我的剧本: #!/bin/bash echo "Name of shell is $SHELL" relase=`uname -r` echo "Release is: $relase" if [ $SHELL != "/bin/bash" ] || [ $relase != "3.13.0-32-generic" ] ; then echo "Warning, different configuration" fi if [ $# -eq 0

我想知道为什么awk在后台运行时打印不同的输出

我的剧本:

#!/bin/bash
echo "Name of shell is $SHELL"
relase=`uname -r`
echo "Release is: $relase"
if [ $SHELL != "/bin/bash" ] || [ $relase != "3.13.0-32-generic" ] ; then
  echo "Warning, different configuration"
fi
if [ $# -eq 0 ] ; then
  echo "Insert name of shell"
  read sname
else
   sname=$1
fi
awk -v sname="$sname" 'BEGIN {FS=":"} {if ($7 == sname) print $1 }' </etc/passwd &
但当我在后台运行带符号的awk时,输出如下:

petr@PetrLinux-VirtualBox:~/Documents$ ./script1 /bin/bash
Name of shell is /bin/bash
Release is: 3.13.0-32-generic
petr@PetrLinux-VirtualBox:~/Documents$ root
petr

第一个记录根不打印在单行上。请告诉我为什么有办法在后台运行时在单行上打印。谢谢

您看到的是两种输出的混合。第一个输出是shell的输出,打印命令提示符petr@PetrLinux-VirtualBox:~/Documents$。第二个输出是来自脚本的root

当shell脚本在后台运行时,现在有两个进程正在写入终端窗口:bash打印提示符,脚本打印awk输出。这就搞混了

防止这种情况发生的唯一方法是将脚本的输出重定向到文件或其他设备,而不是控制台。例如:
$./script1/bin/bash&>output.txt&

您看到的是两个输出的混合。第一个输出是shell的输出,打印命令提示符petr@PetrLinux-VirtualBox:~/Documents$。第二个输出是来自脚本的root

当shell脚本在后台运行时,现在有两个进程正在写入终端窗口:bash打印提示符,脚本打印awk输出。这就搞混了

防止这种情况发生的唯一方法是将脚本的输出重定向到文件或其他设备,而不是控制台。例如:
$./script1/bin/bash&>output.txt&

输出相同。它只是看起来不同,因为两个进程在终端的同一个通道上写入数据,并混合它们的输出。一个进程是awk脚本,另一个是shell,它打印一个新的提示

无法确定输出从一个进程切换到另一个进程的精确点。在使用相同软件的不同系统上可能会有所不同,也可能取决于计算机的负载和许多其他因素


唯一合适的解决方案是将输出重定向到不同的流中,例如。G使用>输出文件的文件。

输出相同。它只是看起来不同,因为两个进程在终端的同一个通道上写入数据,并混合它们的输出。一个进程是awk脚本,另一个是shell,它打印一个新的提示

无法确定输出从一个进程切换到另一个进程的精确点。在使用相同软件的不同系统上可能会有所不同,也可能取决于计算机的负载和许多其他因素


唯一合适的解决方案是将输出重定向到不同的流中,例如。G使用>输出文件的文件。

你以37秒的优势击败了我-啊,防止这个特殊问题或输出混乱的另一种方法可能是这个小技巧:睡眠1;回声/script1/bin/bash&当然,这只是一个黑客行为。但这种黑客行为只有在脚本运行不到一秒钟时才有效,不是吗?在实际解析/etc/passwd时,可能就是这样。但是我想知道为什么首先在后台运行它:-是的,它也能解决问题-啊,防止这个特殊问题或输出混乱的另一种方法可能是这个小技巧:睡眠1;回声/script1/bin/bash&当然,这只是一个黑客行为。但这种黑客行为只有在脚本运行不到一秒钟时才有效,不是吗?在实际解析/etc/passwd时,可能就是这样。但是我想知道为什么首先在后台运行它:-是的,它也可以解决问题。
petr@PetrLinux-VirtualBox:~/Documents$ ./script1 /bin/bash
Name of shell is /bin/bash
Release is: 3.13.0-32-generic
petr@PetrLinux-VirtualBox:~/Documents$ root
petr