Если можно высказать разумное предположение как, туда, где команда расположена, конфетка может сказать Вам, в каком пакете это находится.
# yum resolvedep /usr/bin/timeconfig
No Package Found for /usr/bin/timeconfig
# yum resolvedep /usr/sbin/timeconfig
0:system-config-date-1.8.12-4.el5.noarch
Числа являются дескрипторами файлов, и только первые три (запускающийся с нуля) имеют стандартизированное значение:
0 - stdin
1 - stdout
2 - stderr
Так каждое из этих чисел в Вашей команде относятся к дескриптору файла. Можно или перенаправить дескриптор файла в файл с >
или перенаправьте его к другому дескриптору файла с >&
3>&1
в Вашей командной строке создаст новый дескриптор файла и перенаправит его к 1
который является STDOUT
. Теперь 1>&2
перенаправит дескриптор файла 1 к STDERR
и 2>&3
перенаправит дескриптор файла 2 - 3, который является STDOUT
.
Так в основном Вы переключились STDOUT
и STDERR
, это шаги:
Теперь, если программа распечатает что-то к дескриптору файла 1, то это будет распечатано к дескриптору файла 2 и наоборот.
Это подкачивает stdout
и stderr
.
>name
средства перенаправляют вывод в файл name
.
>&number
средства перенаправляют вывод к дескриптору файла number
.
Так &
необходим, чтобы сказать оболочке, что Вы имеете в виду дескриптор файла, не имя файла.
Дескриптор файла является числом, которое относится к уже открытому файлу. Стандартные 0
для стандартного входа, 1
для стандартного вывода или 2
для стандартной погрешности. Можно также использовать любое другое число, которое создаст новый дескриптор файла, точно так же, как когда Вы создадите новую переменную с var=value
.
По умолчанию, оба дескриптора файла 1
и 2
перейдите в /dev/tty
, таким образом, если Вы работаете somecommand 3>&1 1>&2 2>&3
в новой оболочке это ничего не изменяет (кроме теперь, у Вас есть дескриптор файла номер 3).
Но если где-нибудь ранее в сценарии это делает перенаправление с помощью должностного лица (например. exec 2>error.log
), или скрипт запущен с командной строкой включая перенаправление (например. ./thescript 2>error.log
), затем свопинг stdout и stderr сделает что-то.
В Вашем конкретном случае команда это имеет ее stdout, и подкачанный stderr dialog
. Смотря на его страницу справочника, я вижу
Some widgets, e.g., checklist, will write text to dialog's output.
Normally that is the standard error
таким образом, возможно, человек, который записал сценарий, хочет dialog
вывод для движения в stdout
вместо stderr
по некоторым причинам.
См. также Порядок перенаправлений
Сценарист определил fd 3, например:
exec 3<> File.txt
Откройте "File.txt" и назначьте ему fd 3. Максимальное количество файловых дескрипторов :255
read -n 4 <&3
Чтение только 4 символов.
echo -n. >&3
Напишите там десятичную точку.
exec 3>&-
Закрыть fd 3.
cat File.txt
==> 1234.67890
Я понял назначение файлового дескриптора и команды «3> & 1 1> & 2 2> & 3» на примере ниже
#!/bin/bash
#it's normal case fd enviroment
echo test 1> afile.txt
echo test1111111111111
cat afile.txt
echo test1111111111111
echo test 2> afile.txt
echo test2222222222222
cat afile.txt
echo test2222222222222
e1cho test 1> afile.txt
echo test333333333333
cat afile.txt
echo test333333333333
ec1ho test 2> afile.txt
echo test4444444444444
cat afile.txt
echo test444444444444
echo > afile.txt
echo ------------------------------------------------------------------------------------------------------
#it's relocate filedescriptor and cause not problem, and cause error(std error)
var=
var=$(echo test 3>&1 1>&2 2>&3)
echo test555555555555
#cat afile.txt
echo $var
echo test555555555555
var=
var=$(ec1ho test 3>&1 1>&2 2>&3)
echo test6666666666666
#cat afile.txt
echo $var
echo test666666666666
var=
var=$(ec1ho test 3>&1 1>&2 2>&3)
echo test77777777777777
#cat afile.txt
echo $var
echo test77777777777777
var=
var=$(echo test 3>&1 1>&2 2>&3)
echo test88888888888888
#cat afile.txt
echo $var
echo test8888888888888
Когда вы запустите этот пример, вы увидите, что файловые дескрипторы переупорядочиваются, а выходные данные изменяются.