Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux AWK命令返回0_Linux_Awk - Fatal编程技术网

Linux AWK命令返回0

Linux AWK命令返回0,linux,awk,Linux,Awk,使用以下代码运行AWK命令时 awk -F: 'BEGIN{OFS=":"} ($2 != "*" && $2 != "!") {$2=system("openssl passwd -1 -salt {salt} {password}"); print $2}' PASS/shadow.txt > PASS/test.txt | cat PASS/test.txt 打印命令时,我将收到: “加密密码” 0 它将把2美元改为0美元。但仍然打印出散列。是否仍有方法修复此问

使用以下代码运行AWK命令时

awk -F: 'BEGIN{OFS=":"} ($2 != "*" && $2 != "!") {$2=system("openssl passwd -1 -salt {salt} {password}"); print $2}' PASS/shadow.txt > PASS/test.txt |  cat PASS/test.txt 
打印命令时,我将收到:

“加密密码”
0

它将把2美元改为0美元。但仍然打印出散列。是否仍有方法修复此问题,并将2=命令的输出


我正在尝试将所有$2字段替换为一个新的密码哈希,作为类中的一个示例项目,并将结果存储在一个新文件中。

听起来您可能正试图这样做:

awk '
    BEGIN { FS=OFS=":" }
    $2 !~ /^[*!]$/ {
        cmd = "openssl passwd -1 -salt {salt} {password}"
        if ( (cmd | getline line) > 0 ) {
            $2 = line
        }
        close(cmd)
    }
    { print }
' PASS/shadow.txt > PASS/test.txt

如果没有,请编辑您的问题,以澄清您的需求,并提供更好的示例。

听起来您可能正试图这样做:

awk '
    BEGIN { FS=OFS=":" }
    $2 !~ /^[*!]$/ {
        cmd = "openssl passwd -1 -salt {salt} {password}"
        if ( (cmd | getline line) > 0 ) {
            $2 = line
        }
        close(cmd)
    }
    { print }
' PASS/shadow.txt > PASS/test.txt

如果没有,则编辑您的问题以澄清您的需求并提供更好的示例。

您使用的
系统
命令没有达到您的预期效果。它返回您执行的命令的返回码,而不是标准输出

system(expression)
执行
expression
给出的命令,执行方式与
POSIX.1-2017
系统接口卷中定义的功能相同,并返回命令的退出状态

您可以通过以下内容轻松看到这一点:

$ awk 'BEGIN{print system("true"), system("false")}'
0 1
在这里,我们执行了命令
true
false
(请参见
man-true
man-false


如果要捕获命令的输出,则需要使用
getline
命令。有关
getline
的应做和不应做的详细文档,请参见。另请参见此操作的实现。

您使用的
系统
命令没有达到预期效果。它返回您执行的命令的返回码,而不是标准输出

system(expression)
执行
expression
给出的命令,执行方式与
POSIX.1-2017
系统接口卷中定义的功能相同,并返回命令的退出状态

您可以通过以下内容轻松看到这一点:

$ awk 'BEGIN{print system("true"), system("false")}'
0 1
在这里,我们执行了命令
true
false
(请参见
man-true
man-false


如果要捕获命令的输出,则需要使用
getline
命令。有关
getline
的应做和不应做的详细文档,请参见。有关此操作的实现,请参见。

system()
返回命令的退出状态,而不是命令的输出。欢迎使用SO。command
$2=system(“opensslpasswd-1-salt{salt}{password}”)
不会像您想的那样工作,
system
命令将打开一个子shell,不会将该命令的输出保存到
$2
中,而是保存其退出状态(如果我在这里没有错的话),因此,您需要让我们知道您的完整需求,以便我们更好地理解您的问题。
system()
返回命令的退出状态,而不是命令的输出。欢迎使用so。command
$2=system(“opensslpasswd-1-salt{salt}{password}”)
不会像您想的那样工作,
system
命令将打开一个子shell,不会将该命令的输出保存到
$2
中,而是保存其退出状态(如果我在这里没有错的话),因此,您需要让我们知道您的完整要求,以便我们更好地理解您的问题。