Сценарий оболочки, который выводит команды, выводимые на терминал - PullRequest
0 голосов
/ 19 марта 2020

Сценарий оболочки, который отображает вывод команды на терминал, пока он выводит только пустое пространство. Как я могу получить желаемый результат? Я попытался повторить саму переменную без какой-либо удачи, поэтому я предполагаю, что проблема связана с самой командой.

Фактический результат:

~$ 

Предпочтительный результат:

Name N. Name
Name N. Name
Name N. Name
Name N. Name
#! /bin/bash

function ag_students() {

ag_names=$(grep -i ^[A-G] /etc/passwd |  cut  -d:  -f5  /etc/passwd > tmp | echo "$tmp" ;)
echo "$tmp"

}

$ag_students
echo "Here are the names: $tmp"

1 Ответ

0 голосов
/ 20 марта 2020

Исходный код, с некоторыми комментариями:

#! /bin/bash

function ag_students() {
# grep -i ^[A-G] -> grep -i [a-g] # it is absolutely same but you do not need to hit your [shift] key repeatedly.
# <command> | cut  -d:  -f5  /etc/passwd
# It is stange for me. From the one point of view you want to handle the output
# of the <command1> using <command2> ("cut" utility).
# From the other side you specified the input file for it (/etc/passwd)
# Look at the "cut --help"
# Thus it should be:
# grep -i ^[a-g] /etc/passwd | cut -d: -f5
# without any additions
# Next: "<command> > <name>" will store its output to the file <name>, not to the variable <name>
# "cut -d: -f5 /etc/passwd > tmp" will store its output to the file "tmp", not to the variable with same name
# finally, because, according above, variable "$tmp" still not initialized,
# "echo "$tmp"" will return the empty string whith is assigned to "ag_names" variable

# ag_names=$(grep -i ^[A-G] /etc/passwd | cut -d: -f5 /etc/passwd > tmp | echo "$tmp" ;)

# The right solution:
ag_names=$(grep -i [a-g] /etc/passwd | cut -d: -f5)
# or simpy
grep -i [a-g] /etc/passwd | cut -d: -f5

# It is unnecessary because previous bunch of command alredy output what you want
# echo "$tmp"
}

# Using dollar sign you are trying to execute command contains in the "ag_students" variable (which is not initialized/empty)
# and executing something empty you will get empty result also
$ag_students
# to execute a function - execute it as any other command:
ag_students
# And if you want to have its result in some variable:
tmp=$(ag_students) # as usual
echo "Here are the names: $tmp"

В качестве вывода, не связанного с логикой c, ваш скрипт должен быть:

#!/bin/bash

function ag_students() {
    grep -i ^[a-g] /etc/passwd | cut -d: -f5
}

tmp=$(ag_students)
echo "Here are the names: $tmp"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...