නැවත හරවා යැවීම පිළිබඳ සමහර උපක්රම
මේ පිළිබඳ සමහර සින්ටැක්ස් විශේෂතාවයට වැදගත් හැසිරීම් තිබිය හැකිය. Redirections, සමහර අය ගැන ටිකක් සාම්පල ඇත STDERR, STDOUTසහ තර්ක ඇනවුම් කිරීම .
1 - නැවත ලිවීම හෝ එකතු කිරීම? 
සංකේතය >යනු යළි හරවා යැවීමයි .
- >අදහස් සමස්තයක් සම්පූර්ණ කරන ගොනුවක් ලෙස යවන්න , පවතී නම් ඉලක්කය මත ලියන්නේ (බලන්න- noclobberදී පැවැත්වෙනු ලක්ෂණය # 3 පසුව).
- >>මධ්යන්ය යැවීමට අමතරව යැවීම යන්න ඉලක්කයට එකතු වේ.
ඕනෑම අවස්ථාවක, ගොනුව නොපවතී නම් එය නිර්මාණය වේ.
2 - ෂෙල් විධාන රේඛාව ඇණවුම මත රඳා පවතී !!
මෙය පරීක්ෂා කිරීම සඳහා, අපට සරල විධානයක් අවශ්ය වන අතර එමඟින් ප්රතිදානයන් දෙකටම යමක් යවනු ලැබේ :
$ ls -ld /tmp /tnt
ls: cannot access /tnt: No such file or directory
drwxrwxrwt 118 root root 196608 Jan  7 11:49 /tmp
$ ls -ld /tmp /tnt >/dev/null
ls: cannot access /tnt: No such file or directory
$ ls -ld /tmp /tnt 2>/dev/null
drwxrwxrwt 118 root root 196608 Jan  7 11:49 /tmp
(ඔබට නාමාවලියක් නොමැති බව අපේක්ෂා /tntකිරීම, ඇත්ත වශයෙන්ම;). හොඳයි, අපට එය තිබේ !!
ඉතින්, අපි බලමු:
$ ls -ld /tmp /tnt >/dev/null
ls: cannot access /tnt: No such file or directory
$ ls -ld /tmp /tnt >/dev/null 2>&1
$ ls -ld /tmp /tnt 2>&1 >/dev/null
ls: cannot access /tnt: No such file or directory
අන්තිම විධාන රේඛාව STDERRකොන්සෝලය වෙතට ඇද වැටෙන අතර එය අපේක්ෂිත හැසිරීම නොවන බව පෙනේ ... නමුත් ...
ඔබට එක් නිමැවුමක් ගැන පෝස්ට් පෙරනයක් කිරීමට අවශ්ය නම් , අනෙක් හෝ දෙකම:
$ ls -ld /tmp /tnt | sed 's/^.*$/<-- & --->/'
ls: cannot access /tnt: No such file or directory
<-- drwxrwxrwt 118 root root 196608 Jan  7 12:02 /tmp --->
$ ls -ld /tmp /tnt 2>&1 | sed 's/^.*$/<-- & --->/'
<-- ls: cannot access /tnt: No such file or directory --->
<-- drwxrwxrwt 118 root root 196608 Jan  7 12:02 /tmp --->
$ ls -ld /tmp /tnt >/dev/null | sed 's/^.*$/<-- & --->/'
ls: cannot access /tnt: No such file or directory
$ ls -ld /tmp /tnt >/dev/null 2>&1 | sed 's/^.*$/<-- & --->/'
$ ls -ld /tmp /tnt 2>&1 >/dev/null | sed 's/^.*$/<-- & --->/'
<-- ls: cannot access /tnt: No such file or directory --->
මෙම ඡේදයේ අවසාන විධාන රේඛාව පෙර ඡේදයට සමාන බව සලකන්න , එහිදී මා ලියා ඇත්තේ අපේක්ෂිත හැසිරීම නොවන බව පෙනේ (එබැවින් මෙය අපේක්ෂිත හැසිරීමක් විය හැකිය).
ප්රතිදානයන් දෙකෙහිම වෙනස් ක්රියාකාරිත්වයක් සිදු කිරීම සඳහා, යළි-යොමුවීම් පිළිබඳ කුඩා උපක්රම තිබේ
 :
$ ( ls -ld /tmp /tnt | sed 's/^/O: /' >&9 ) 9>&2  2>&1  | sed 's/^/E: /'
O: drwxrwxrwt 118 root root 196608 Jan  7 12:13 /tmp
E: ls: cannot access /tnt: No such file or directory
සටහන: &9විස්තර කරන්නා ස්වයංසිද්ධව සිදුවන්නේ ) 9>&2.
අතිරේක: නෝටා! හි නව අනුවාදය සමඟbash( >4.0) මේ ආකාරයේ දේවල් කිරීම සඳහා නව අංගයක් සහ වඩාත් සරාගී සින්ටැක්ස් ඇත:
$ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')
O: drwxrwxrwt 17 root root 28672 Nov  5 23:00 /tmp
E: ls: cannot access /tnt: No such file or directory
අවසාන වශයෙන් එවැනි කඳුරැල්ලක ප්රතිදාන හැඩතල ගැන්වීම සඳහා:
$ ((ls -ld /tmp /tnt |sed 's/^/O: /' >&9 ) 2>&1 |sed 's/^/E: /') 9>&1| cat -n
     1  O: drwxrwxrwt 118 root root 196608 Jan  7 12:29 /tmp
     2  E: ls: cannot access /tnt: No such file or directory
අතිරේක: නෝටා! එකම නව වාක්ය ඛණ්ඩය, ක්රම දෙකෙන්ම:
$ cat -n <(ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /'))
     1  O: drwxrwxrwt 17 root root 28672 Nov  5 23:00 /tmp
     2  E: ls: cannot access /tnt: No such file or directory
කොහෙද STDOUT, නිශ්චිත පෙරහන හරහා යන්න STDERRතවත් හා අවසානයේ ප්රතිදානයන් දෙකම තුන්වන විධානය පෙරහන හරහා යන්න ඒකාබද්ධ.
3 - noclobberවිකල්පය සහ >|වාක්ය ඛණ්ඩය පිළිබඳ වචනයක්
එය නැවත ලිවීම ගැන ය :
අතර set -o noclobberඋපදෙස් ලබා bash කිරීමට නොහැකි කිසිදු පවතින ගොනුවට ලිපිය, එම >|කාරක රීති ඔබ මෙම සීමාවන් හරහා ගමන් කරමු:
$ testfile=$(mktemp /tmp/testNoClobberDate-XXXXXX)
$ date > $testfile ; cat $testfile
Mon Jan  7 13:18:15 CET 2013
$ date > $testfile ; cat $testfile
Mon Jan  7 13:18:19 CET 2013
$ date > $testfile ; cat $testfile
Mon Jan  7 13:18:21 CET 2013
ගොනුව සෑම අවස්ථාවකදීම නැවත ලියනු ලැබේ, දැන්:
$ set -o noclobber
$ date > $testfile ; cat $testfile
bash: /tmp/testNoClobberDate-WW1xi9: cannot overwrite existing file
Mon Jan  7 13:18:21 CET 2013
$ date > $testfile ; cat $testfile
bash: /tmp/testNoClobberDate-WW1xi9: cannot overwrite existing file
Mon Jan  7 13:18:21 CET 2013
සමඟ ගමන් කරන්න >|:
$ date >| $testfile ; cat $testfile
Mon Jan  7 13:18:58 CET 2013
$ date >| $testfile ; cat $testfile
Mon Jan  7 13:19:01 CET 2013
මෙම විකල්පය අස්ථාපනය කිරීම සහ / හෝ දැනටමත් සකසා තිබේදැයි විමසීම.
$ set -o | grep noclobber
noclobber           on
$ set +o noclobber
$ set -o | grep noclobber
noclobber           off
$ date > $testfile ; cat $testfile
Mon Jan  7 13:24:27 CET 2013
$ rm $testfile
4 - අවසාන උපක්රමය සහ තවත් ...
දී ඇති විධානයකින් ප්රතිදානය දෙකම හරවා යැවීම සඳහා, නිවැරදි සින්ටැක්ස් එකක් විය හැකි බව අපට පෙනේ:
$ ls -ld /tmp /tnt >/dev/null 2>&1
මෙම විශේෂ අවස්ථාව සඳහා, කෙටිමං සින්ටැක්ස් ඇත: &>... හෝ>&
$ ls -ld /tmp /tnt &>/dev/null
$ ls -ld /tmp /tnt >&/dev/null
සටහන: 2>&1පවතින්නේ 1>&2නම් එය නිවැරදි වාක්ය ඛණ්ඩයකි:
$ ls -ld /tmp /tnt 2>/dev/null 1>&2
4b- දැන්, මම ඔබට මේ ගැන සිතා බැලීමට ඉඩ දෙන්නෙමි:
$ ls -ld /tmp /tnt 2>&1 1>&2  | sed -e s/^/++/
++/bin/ls: cannot access /tnt: No such file or directory
++drwxrwxrwt 193 root root 196608 Feb  9 11:08 /tmp/
$ ls -ld /tmp /tnt 1>&2 2>&1  | sed -e s/^/++/
/bin/ls: cannot access /tnt: No such file or directory
drwxrwxrwt 193 root root 196608 Feb  9 11:08 /tmp/
4c- ඔබ වැඩි විස්තර සඳහා කැමති නම්
පහර දීමෙන් ඔබට සියුම් අත්පොත කියවිය හැකිය:
man -Len -Pless\ +/^REDIRECTION bash
තුළ bash console ;-)