Выполнить команду сортировки в терминале

Return

Значение return сохраняется в $? после каждого вызова команды / функции. Попробуйте это, чтобы получить к нему доступ:

function add_nos {
    echo "$1"
    echo $(($1 + 20))
    return 1
}

result=`add_nos $1`
retval=$?  # this is the "return" value of "add_nos"
echo "result: $result"
echo "return: $retval"

См. Справочную страницу. Также этот вопрос и эта статья.

Stderr

В качестве другого ответа, предложенного , man page является хорошим местом для отправки вывода отладки. Вы также можете сделать намного больше, чем просто возвращаемое значение. Попробуйте это:

function add_nos {
    echo "input: $1" >&2
    echo $(($1 + 20))
    echo "done now!" >&2
}

echo "starting script" >&2
result=`add_nos $1`
echo "result: $result"

Затем запустите его с и без вывода отладки, перенаправив этот вопрос :

$ bash setup.sh 10  
starting script
input: 10
done now!
result: 30

$ bash setup.sh 10 2>/dev/null
result: 30

$ bash setup.sh 10 2>logfile
result: 30

$ cat logfile
starting script
input: 10
done now!
0
задан 7 April 2018 в 14:23

3 ответа

Вы не сортируете только третье поле. Если вы не укажете как начальное, так и конечное поля, сортировка выполняется с использованием начала поля начала до конца строки. Из man sort:

KEYDEF  is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
F is a field number and C a character position in the field;  both  are
origin 1, and the stop position defaults to the line's end. 

Таким образом, :... также включен в сортировку.

Используйте -k3,3, если вам нужно сортировать только в третьем поле: [ ! d4]

% sort -t: -k3,3 foo | grep '^n' 
ntp:x:38:38::/etc/ntp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash

С помощью сортировки GNU вы можете проверить, что происходит с --debug:

$ sort -t: -k3,3 foo --debug | tail    
sort: using ‘en_GB.UTF-8’ sorting rules
______________________________________________
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
          __
_________________________________________________
nobody:x:99:99:Nobody:/:/sbin/nologin
         __
_____________________________________
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
          ___
_______________________________________________________
$ sort -t: -k3 foo --debug | tail 
sort: using ‘en_GB.UTF-8’ sorting rules
______________________________________________
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
          _______________________________________
_________________________________________________
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
          _____________________________________________
_______________________________________________________
nobody:x:99:99:Nobody:/:/sbin/nologin
         ____________________________
_____________________________________

В пунктирах, расположенных ниже каждой строки, показан раздел сравнения.

5
ответ дан 22 May 2018 в 11:34

Вы не сортируете только третье поле. Если вы не укажете как начальное, так и конечное поля, сортировка выполняется с использованием начала поля начала до конца строки. Из man sort:

KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop position defaults to the line's end.

Таким образом, :... также включен в сортировку.

Используйте -k3,3, если вам нужно сортировать только в третьем поле: [ ! d4] % sort -t: -k3,3 foo | grep '^n' ntp:x:38:38::/etc/ntp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash

С помощью сортировки GNU вы можете проверить, что происходит с --debug:

$ sort -t: -k3,3 foo --debug | tail sort: using ‘en_GB.UTF-8’ sorting rules ______________________________________________ postfix:x:89:89::/var/spool/postfix:/sbin/nologin __ _________________________________________________ nobody:x:99:99:Nobody:/:/sbin/nologin __ _____________________________________ nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash ___ _______________________________________________________ $ sort -t: -k3 foo --debug | tail sort: using ‘en_GB.UTF-8’ sorting rules ______________________________________________ postfix:x:89:89::/var/spool/postfix:/sbin/nologin _______________________________________ _________________________________________________ nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash _____________________________________________ _______________________________________________________ nobody:x:99:99:Nobody:/:/sbin/nologin ____________________________ _____________________________________

В пунктирах, расположенных ниже каждой строки, показан раздел сравнения.

5
ответ дан 17 July 2018 в 17:19

Вы не сортируете только третье поле. Если вы не укажете как начальное, так и конечное поля, сортировка выполняется с использованием начала поля начала до конца строки. Из man sort:

KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop position defaults to the line's end.

Таким образом, :... также включен в сортировку.

Используйте -k3,3, если вам нужно сортировать только в третьем поле: [ ! d4] % sort -t: -k3,3 foo | grep '^n' ntp:x:38:38::/etc/ntp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash

С помощью сортировки GNU вы можете проверить, что происходит с --debug:

$ sort -t: -k3,3 foo --debug | tail sort: using ‘en_GB.UTF-8’ sorting rules ______________________________________________ postfix:x:89:89::/var/spool/postfix:/sbin/nologin __ _________________________________________________ nobody:x:99:99:Nobody:/:/sbin/nologin __ _____________________________________ nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash ___ _______________________________________________________ $ sort -t: -k3 foo --debug | tail sort: using ‘en_GB.UTF-8’ sorting rules ______________________________________________ postfix:x:89:89::/var/spool/postfix:/sbin/nologin _______________________________________ _________________________________________________ nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash _____________________________________________ _______________________________________________________ nobody:x:99:99:Nobody:/:/sbin/nologin ____________________________ _____________________________________

В пунктирах, расположенных ниже каждой строки, показан раздел сравнения.

5
ответ дан 23 July 2018 в 18:09

Другие вопросы по тегам:

Похожие вопросы: