නැවත හරවා යැවීම පිළිබඳ සමහර උපක්රම
මේ පිළිබඳ සමහර සින්ටැක්ස් විශේෂතාවයට වැදගත් හැසිරීම් තිබිය හැකිය. 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 ;-)