���Ȃ��̒m��Ȃ�>|��<>�̎g�����F�X�}�[�g�Ȑa�m�̂��߂̃V�F���X�N���v�g�i6�j�i1/2 �y�[�W�j

>��>>�A>&�Ƃ������Ђ�ς�Ɏg���郊�_�C���N�g�ɑ΂��A�قƂ�ǎg���邱�Ƃ̂Ȃ����_�C���N�g��>|��<>���B���ۂɂ͋����[���@�\�ł���A�����u�m��ꂴ��v���_�C���N�g�ɂ‚��Đ������悤�B�i�ҏW���j

» 2012�N07��13�� 00��00�� ���J
[�㓡��n�CBSD�R���T���e�B���O�������]

���Ȃ��̒m��Ȃ����_�C���N�g�A>|��<>

�@�V�F�����񋟂���@�\�̓J�[�l�����񋟂��Ă���@�\���_�C���N�g�ɗ��p������̂������B�‚܂�A�V�F���̋L�q���_�C���N�g�ɃV�X�e���R�[���Ɍ��ѕt���悤�ȋ@�\�������Ƃ������Ƃ��B�R�}���h�̎��s�A�p�C�v�A���_�C���N�g�Ȃǂ́A�������肻�̂܂܃V�X�e���R�[���ɒu�������B

�@���_�C���N�g�ł���΁A�قƂ�ǂ̃P�[�X��>�Ȃ�����>>�Ŏ������͂����B2>&1�Ƃ����L�q�͂����1�‚̋@�\�Ɏv���邪�A�����>&�Ƃ������_�C���N�g�̓T�^�I�Ȏg������1�‚ł���A�‚܂�̓��_�C���N�g���B

�@>�A>>�A>&�͂悭�g���郊�_�C���N�g�Ƃ�����B�������Ash(1)�̃}�j���A���ɂ͎��̂悤�ɁA9�‚̃��_�C���N�g���Љ��Ă���B

Redirection operators:
         <     >     <<    >>    <>
         <&    >&    <<-   >|

�@���̒��ł����ɂȂ��݂̂Ȃ����_�C���N�g��>|�Ɓ�₾�낤�B���ہA�����̃��_�C���N�g���g���邱�Ƃ͂قƂ�ǂȂ��B

�@���������͂����͋����[���@�\�ł���A�V�F�����ɂ߂Ă����̂ł���΁A���Ўg������m���Ă��������B�����sh(1)�̃\�[�X�R�[�h��ǂ݂Ȃ���A����烊�_�C���N�g������������̂����Љ��B

���ڂɊ֌W����>��>|

�@�V�F���̃\�[�X�R�[�h��ǂނƂȂ�ƁAFreeBSD sh�iash�j���K�x�ȃ\�[�X�R�[�h�ʂň����₷���B���_�C���N�g�̏�����/usr/src/bin/sh/redir.c�ɋL�ڂ���Ă���B

�@>�̃��_�C���N�g���������Ă���̂�redir.c��190�s�ڂ�case NTO:����̍s���B-C�I�v�V�������������邽�߁A�܂�>|�Ə����R�[�h�����L���邽�߂Ɏ኱�ǂ݂ɂ����Ȃ��Ă��邪�A�ŏI�I�ɂ�open(2)�V�X�e���R�[���ɒu��������Ă��邱�Ƃ�������B

190         case NTO:
191                 if (Cflag) {
192                         fname = redir->nfile.expfname;
193                         if (stat(fname, &sb) == -1) {
194                                 if ((f = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0666)) < 0)
195                                         error("cannot create %s: %s", fname, strerror(errno));
196                         } else if (!S_ISREG(sb.st_mode)) {
197                                 if ((f = open(fname, O_WRONLY, 0666)) < 0)
198                                         error("cannot create %s: %s", fname, strerror(errno));
199                                 if (fstat(f, &sb) != -1 && S_ISREG(sb.st_mode)) {
200                                         close(f);
201                                         error("cannot create %s: %s", fname,
202                                             strerror(EEXIST));
203                                 }
204                         } else
205                                 error("cannot create %s: %s", fname,
206                                     strerror(EEXIST));
207                         goto movefd;
208                 }
209                 /* FALLTHROUGH */
210         case NCLOBBER:
211                 fname = redir->nfile.expfname;
212                 if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
213                         error("cannot create %s: %s", fname, strerror(errno));
214                 goto movefd;

�@case�Ŏw�肳��Ă���l�́A�p�[�T��ʂ��ĕ������ꂽ�p�[�c�������Ă���B/usr/src/bin/sh/nodetypes�ɂ܂Ƃ܂�������������̂Ō��Ă��������BNTO:��>�ANCLOBBER��>|���B>>�ɂ�NAPPEND�����蓖�Ă��Ă���A<>��NFROMTO�����蓖�Ă��Ă���B

115 NTO nfile                       # fd> fname
116 NFROM nfile                     # fd< fname
117 NFROMTO nfile                   # fd<> fname
118 NAPPEND nfile                   # fd>> fname
119 NCLOBBER nfile                  # fd>| fname

�@NTO:�̏����́A-C���w�肳��Ă���ꍇ�ɁA���̂悤�Ƀt�@�C�����I�[�v�����鏈���ɂȂ��Ă���B-C�́A�u�����̃t�@�C�������݂���ꍇ�ɂ�>�ł̏㏑���͎��{���Ȃ��v�Ƃ����I�v�V�������B

190         case NTO:
191                 if (Cflag) {
...
194                                 if ((f = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0666)) < 0)

�@���̂悤��-C���w�肵��sh(1)�����s����Ɠ�����������B-C���w�肳��Ă���ꍇ�A>�Ńt�@�C����V�K�쐬���邱�Ƃ͂ł��邪�A�t�@�C�������݂���ꍇ�ɂ͏㏑���ł��Ȃ��B>|�́A���Ƃ�-C���w�肳��Ă���ꍇ�ł��A�����̃t�@�C���ւ̏㏑�������{���邽�߂̃��_�C���N�g���B

% sh -C
$ echo test > file
$ echo test > file
cannot create file: �t�@�C�������݂��܂�
$ echo test >| file
$ 

�@�‚܂�A-C���w�肳��Ă���ꍇ�ɂ͏������قȂ邪�A-C���w�肳��Ă��Ȃ��ꍇ�ɂ�>��>|�͓������������邱�ƂɂȂ�Bcase NTO:�ɓ���ƁA-C���w�肳��Ă��Ȃ��ꍇ�ɂ͂��̂܂�case NCLOBBER:�̏����Ɉڂ��Ă���̂͂��̂��߂��B>��>|�ŏ��������L���Ă���B

210         case NCLOBBER:
211                 fname = redir->nfile.expfname;
212                 if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
213                         error("cannot create %s: %s", fname, strerror(errno));
214                 goto movefd;

�@>�͂‚܂�A�uO_WRONLY|O_CREAT|O_TRUNC, 0666�v�̃I�v�V�����Ńt�@�C�����J���Ƃ������������Ă��邱�ƂɂȂ�B�t�@�C���͏������ݐ�p�ŊJ���A�t�@�C�������݂��Ȃ��ꍇ�ɂ�0666�Ƀ}�X�N��K�p�����p�[�~�b�V�����ŐV�K�쐬���A�J���Ɠ����Ƀg�����P�[�g�����{���A�t�@�C���T�C�Y��0�ɂ��Ă��珑�����݂��J�n����A�Ƃ������ƂɂȂ�B

�@�t�@�C�����J�������Ƃ́Amovefd:�֏������ڂ��Ă���B

175 movefd:
176                 if (f != fd) {
177                         if (dup2(f, fd) == -1) {
178                                 e = errno;
179                                 close(f);
180                                 error("%d: %s", fd, strerror(e));
181                         }
182                         close(f);
183                 }
184                 break;

�@�J�����t�@�C�����o�͐�A�܂��͓ǂݍ��݌��ɂȂ�悤��dup2(2)�ŃR�s�[���Ă��邱�Ƃ�������B

177                         if (dup2(f, fd) == -1) {
...
179                                 close(f);
...
181                         }
182                         close(f);

�@���̂悤�ɁA���ۂɃV�F���̃\�[�X�R�[�h��ǂނ��ƂŁA���ۂɂ͂ǂ̂悤�ȓ�����������̂����悭������B

�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

�A�C�e�B���f�B�A����̂��m�点

�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

4AI by ��IT - AI�����A�������A���A������
Microsoft �� Windows�őO��2025
AI for �G���W�j�A�����O
���[�R�[�h�^�m�[�R�[�h �Z���g���� by ��IT - IT�G���W�j�A���r�W�l�X�̒��S�Ŋ��􂷂�g�D��
Cloud Native Central by ��IT - �X�P�[���u���Ȕ\�͂�g�D��
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B