Answers:
ඔව් එය කළ හැකි ය, ප්රතිදානය ගොනුවකට හරවා යවන්න:
SomeCommand > SomeFile.txt
නැතහොත් ඔබට දත්ත එකතු කිරීමට අවශ්ය නම්:
SomeCommand >> SomeFile.txt
ඔබට අවශ්ය නම් stderr
මෙයද භාවිතා කරන්න:
SomeCommand &> SomeFile.txt
හෝ මෙය එකතු කිරීමට:
SomeCommand &>> SomeFile.txt
ඔබට දෙකම stderr
සහ ප්රතිදානය කොන්සෝලයෙහි සහ ගොනුවක ප්රදර්ශනය කිරීමට අවශ්ය නම් මෙය භාවිතා කරන්න:
SomeCommand 2>&1 | tee SomeFile.txt
(ඔබට ප්රතිදානය පමණක් අවශ්ය නම්, 2
ඉහත සඳහන් දෑ අතහරින්න )
make
ගොනු බවට අණ එය ඒ වෙනුවට මෙම කාරක රීති අවශ්ය: make > someFile.txt 2>&1
(මූලාශ්රය: linuxquestions.org/questions/linux-newbie-8/... )
ගොනුවකට විධානයක ප්රතිදානය ලිවීමට මූලික වශයෙන් පොදු ක්රම 10 ක් ඇත.
n.e.
සින්ටැක්ස් තීරුවේ අර්ථය "නොපවතින" බව කරුණාවෙන් සලකන්න .
ක්රමයක් ඇත, නමුත් එය තීරුවට ගැලපෙන තරමට සංකීර්ණ ය. ඔබට ඒ පිළිබඳ ලැයිස්තු කොටසේ ප්රයෝජනවත් සබැඳියක් සොයාගත හැකිය.
|| visible in terminal || visible in file || existing
Syntax || StdOut | StdErr || StdOut | StdErr || file
==========++==========+==========++==========+==========++===========
> || no | yes || yes | no || overwrite
>> || no | yes || yes | no || append
|| | || | ||
2> || yes | no || no | yes || overwrite
2>> || yes | no || no | yes || append
|| | || | ||
&> || no | no || yes | yes || overwrite
&>> || no | no || yes | yes || append
|| | || | ||
| tee || yes | yes || yes | no || overwrite
| tee -a || yes | yes || yes | no || append
|| | || | ||
n.e. (*) || yes | yes || no | yes || overwrite
n.e. (*) || yes | yes || no | yes || append
|| | || | ||
|& tee || yes | yes || yes | yes || overwrite
|& tee -a || yes | yes || yes | yes || append
command > output.txt
සම්මත ප්රතිදාන ප්රවාහය ගොනුව වෙත පමණක් හරවා යවනු ලැබේ, එය පර්යන්තයේ නොපෙනේ. ගොනුව දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ.
command >> output.txt
සම්මත ප්රතිදාන ප්රවාහය ගොනුව වෙත පමණක් හරවා යවනු ලැබේ, එය පර්යන්තයේ නොපෙනේ. ගොනුව දැනටමත් තිබේ නම්, නව දත්ත ගොනුවේ අවසානයට එකතු වේ.
command 2> output.txt
සම්මත දෝෂ ප්රවාහය ගොනුව වෙත පමණක් හරවා යවනු ලැබේ, එය පර්යන්තයේ නොපෙනේ. ගොනුව දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ.
command 2>> output.txt
සම්මත දෝෂ ප්රවාහය ගොනුව වෙත පමණක් හරවා යවනු ලැබේ, එය පර්යන්තයේ නොපෙනේ. ගොනුව දැනටමත් තිබේ නම්, නව දත්ත ගොනුවේ අවසානයට එකතු වේ.
command &> output.txt
සම්මත ප්රතිදානය සහ සම්මත දෝෂ ප්රවාහය ගොනුව වෙත පමණක් හරවා යවනු ලැබේ, ටර්මිනලයේ කිසිවක් නොපෙනේ. ගොනුව දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ.
command &>> output.txt
සම්මත ප්රතිදානය සහ සම්මත දෝෂ ප්රවාහය ගොනුව වෙත පමණක් හරවා යවනු ලැබේ, ටර්මිනලයේ කිසිවක් නොපෙනේ. ගොනුව දැනටමත් තිබේ නම්, නව දත්ත ගොනුවේ අවසානයට එකතු වේ ..
command | tee output.txt
සම්මත ප්රතිදාන ප්රවාහය ගොනුවට පිටපත් කරනු ඇත, එය තවමත් පර්යන්තයේ දැකිය හැකිය. ගොනුව දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ.
command | tee -a output.txt
සම්මත ප්රතිදාන ප්රවාහය ගොනුවට පිටපත් කරනු ඇත, එය තවමත් පර්යන්තයේ දැකිය හැකිය. ගොනුව දැනටමත් තිබේ නම්, නව දත්ත ගොනුවේ අවසානයට එකතු වේ.
(*)
දෙවන විධානයකට StdErr පමණක් නල මාර්ගයට ඉඩ දෙන කෙටිකාලීන වාක්ය ඛණ්ඩයක් Bash සතුව නොමැත, එය tee
නැවත වගුව සම්පුර්ණ කිරීම සඳහා මෙහි අවශ්ය වේ. ඔබට ඇත්ත වශයෙන්ම එවැනි දෙයක් අවශ්ය නම්, කරුණාකර බලන්න "stderr නල කරන්නේ කෙසේද, සහ stdout නොවේද?" මෙය සිදු කළ හැකි ආකාරය සඳහා ස්ටක් පිටාර ගැලීම මත උදා. ධාරාවන් මාරු කිරීමෙන් හෝ ක්රියාවලි ආදේශනය භාවිතා කිරීමෙන්.
command |& tee output.txt
ටර්මිනලයේ දෘශ්යමාන වන අතරම සම්මත ප්රතිදානය සහ සම්මත දෝෂ ප්රවාහ දෙකම ගොනුවට පිටපත් කරනු ලැබේ. ගොනුව දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ.
command |& tee -a output.txt
ටර්මිනලයේ දෘශ්යමාන වන අතරම සම්මත ප්රතිදානය සහ සම්මත දෝෂ ප්රවාහ දෙකම ගොනුවට පිටපත් කරනු ලැබේ. ගොනුව දැනටමත් තිබේ නම්, නව දත්ත ගොනුවේ අවසානයට එකතු වේ.
2>&1
STDERR STDOUT වෙත හරවා යවයි, STDOUT STDERR වෙත 1>&2
හරවා යවන අතර 3>&1
3 වන ධාරාව STDERR වෙත හරවා යවනු ඇත.
sh: 1: Syntax error: "&" unexpected
මම |& tee
c9.io සේවාදායකයක පයිතන් ස්ක්රිප්ට් එකකින් භාවිතා කරන විට. වෙනත් කවචයක් භාවිතා කරන බව පෙනේ. 4.3.11 (1) අනුවාදය echo $SHELL
පෙන්වයි /bin/bash
සහ $SHELL --version
පෙන්වයි - නිදහස් කරන්න. මම #!/bin/bash
මගේ පයිතන් පිටපතෙන් උත්සාහ කළ නමුත් මට තවමත් ලැබෙනවා sh: 1: Syntax error
. මට අවශ්ය දේ මට ලැබී ඇති නිසා මගේ සේවාදායකය අතර sh
සහ එහි ඇති අමුතුකම වර්ග කිරීම මම අත්හරිමි bash
. ස්තූතියි.
sh
නොව bash
(හෝ සමහර විට bash
දී sh
මාදිලිය ...). ඔබගේ වර්තමාන ෂෙල් ක්රියාවලිය හරියටම භාවිතා කරන්නේ කුමක් දැයි ඔබට පරීක්ෂා කළ හැකිය ps -p $$ -o cmd=
, මන්ද echo $SHELL
එය විශ්වාස කළ නොහැකි අතර ඔබ වෙනත් උපසිරැසියක් ආරම්භ කර ඇත්දැයි නොසලකා හරිමින් ඔබේ පිවිසුම් කවචය පෙන්වනු ඇත.
tee
ප්රතිදානය ගොනුවකට යැවීමටද ඔබට භාවිතා කළ හැකිය :
command | tee ~/outputfile.txt
සුළු වෙනස් කිරීමකින් stderr ද අල්ලා ගනු ඇත:
command 2>&1 | tee ~/outputfile.txt
හෝ තරමක් කෙටි හා අඩු සංකීර්ණ:
command |& tee ~/outputfile.txt
tee
විධාන ප්රතිදානය සජීවීව නැරඹීමට ඔබට හැකි නම් එය ප්රයෝජනවත් වේ .
2>&1
කෙසේද?
ඔබට විධාන ප්රතිදානය ගොනුවකට හරවා යැවිය හැකිය:
your_command >/path/to/file
විධාන ප්රතිදානය ගොනුව නැවත ලිවීම වෙනුවට එය එකතු කිරීමට, භාවිතා කරන්න:
your_command >>/path/to/file
සලකා බැලිය යුතු වැඩි දියුණු කිරීමක් -
විවිධ ස්ක්රිප්ට් මඟින් ඔබේ ලොග් ගොනුව අවුල් කිරීමට අවශ්ය නොවන ප්රතිදානය තුළට වර්ණ කේත එන්නත් කරනු ඇත.
මෙය නිවැරදි කිරීම සඳහා, ඔබට එම කේත ඉවත් කිරීම සඳහා sed වැඩසටහන භාවිතා කළ හැකිය . උදාහරණයක්:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
ls
සහ grep
, සහය --color=auto
, වර්ණ කේත ප්රතිදානය කරන්නේ සම්මත ප්රතිදානය පර්යන්තයක් නම් පමණි.
සඳහා cron
රැකියා ආදිය ඔබ බෑෂ් දිගු වළක්වා ගැනීමට අවශ්ය. සමාන POSIX sh
යළි-යොමුවීම් ක්රියාකරුවන් වේ
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
POSIX පහසුකම යම් ආකාරයකින් සරල හා සරල බව ඔබට පෙනෙනු ඇත. මෙම &>
කාරක රීති ලබා ගත් ණය විය csh
දැනටමත් එය නරක අදහසක් බව ඔබට ඒත්තු යුතු.
some_command | tee command.log
තවද some_command > command.log
ඔවුන් විධාන ප්රතිදානය command.log
ගොනුවට තත්ය කාලීනව සුරකින ගැටලුවක් නොමැත .
එම ගැටළුව මඟහරවා ගැනීමට සහ විධාන ප්රතිදානය තත්ය කාලීනව සුරැකීමට, ඔබට එකතු කළ හැකිය unbuffer
, එය expect
පැකේජය සමඟ පැමිණේ .
උදාහරණයක්:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
උපකල්පනය කරයි log.py
:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
ඔබ ක්රියාත්මක කළ හැකිය unbuffer python log.py | tee command.log
හෝunbuffer python log.py > command.log
වැඩි විස්තර: තත්ය කාලීනව ගොනුවකට විධාන ප්රතිදානය සුරැකිය හැක්කේ කෙසේද?
මෙහි වෙනස් ප්රශ්න දෙකක් තිබේ. පළමුවැන්න මාතෘකාව තුළ ය:
ටර්මිනල් ප්රතිදානය ගොනුවකට සුරැකෙන්නේ කෙසේද?
දෙවන ප්රශ්නය ශරීරය තුළ ඇත:
විධානයක ප්රතිදානය ගොනුවකට සුරැකෙන්නේ කෙසේද?
මෙහි පළ කර ඇති සියලුම පිළිතුරු දෙවන ප්රශ්නයට ආමන්ත්රණය කරන නමුත් යුනික්ස් සහ ලිනක්ස් හි විශිෂ්ට පිළිතුරක් ඇති පළමු ප්රශ්නයට කිසිවෙකු ආමන්ත්රණය නොකරයි :
මෙම පිළිතුර මඳක් දන්නා විධානයක් භාවිතා කරයි, එය script
ඔබ ටයිප් කරන තෙක් ඔබේ ෂෙල් ප්රතිදානය පෙළ ගොනුවකට සුරකිනු exit
ඇත. විධාන ප්රතිදානය තවමත් ඔබේ තිරය මත දිස්වන අතර පෙළ ගොනුවේ ද දිස් වේ .
ක්රියාවලිය සරලයි. භාවිත:
$ script ~/outputfile.txt
Script started, file is /home/rick/outputfile.txt
$ command1
$ command2
$ command3
$ exit
exit
Script done, file is /home/rick/outputfile.txt
1, 2 සහ 3 විධානයන්හි ඔබේ වාර්තාගත ප්රතිදානය දෙස බලන්න:
cat ~/outputfile.txt
මෙය පෙර පිළිතුරට සමානය :
command |& tee ~/outputfile.txt
|& tee ~/outputfile.txt
එක් එක් පසු භාවිතා කිරීමට අවශ්ය නැත commnd
.script
විධානය නැවත පිරවීම වාසිය (හෝ අවාසිය) සඳහන් කර ඇත ~/.bashrc
එය ආරම්භ කරන විට.script
විධානය සංදර්ශන (විමසුම විධානය $PS1
) ඔබ ඇතුළු විධානය (ව) විසින් අනුගමනය.script
විධානය සම්පූර්ණ වර්ණ සියලු විස්තර වාර්තා කරයි.script
පහත සන්දර්භය තුළ භාවිතා කරමි : මන්දගාමී විධාන රේඛා ක්රියාවලියකට මගේ අවධානය අවශ්ය වූ විට මා අවදි කරන්න?
script
එවැනි යෙදුමක් සඳහා භාවිතා කිරීම ගැන මම කිසි විටෙකත් සිහිනෙන්
එක් එක් විධානයන්ගෙන් ප්රතිදානයන් ගොනුවකට සුරැකීමට, ඔබට සෑම දෙනාටම දැනටමත් සඳහන් කර ඇති COMMAND> filename.txt සහ COMMAND >> filename.txt ක්රමය භාවිතා කළ හැකිය.
නමුත් ස්ක්රිප්ට් විධානය සඳහන් කිරීම වටී යැයි මම සිතමි . ඔබට සම්පූර්ණ පර්යන්ත සැසියක් පටිගත කිරීමට අවශ්ය නම්, එය ගොනුවකට සුරැකීමට ස්ක්රිප්ට් විධානය භාවිතා කළ හැකිය:
ස්ක්රිප්ට් filename.txt
CTRL + D එබීමෙන් ඔබ සැසිය අවසන් කරන තෙක් සියල්ල ගොනුවට සුරකිනු ඇත.
මම නිතරම මෙය භාවිතා නොකරමි. මම ප්රධාන වශයෙන් පමණක් >> ක්රමය භාවිතා කරන්න, නමුත් මම ඇත මම එය වටිනා සඳහන් වූ විය තෙරුම් එසේ, ස්ක්රිප්ට් විධානය කිහිප වතාවක් පාවිච්චි කළා.
චියර්ස්!
-බූයි
someCommand 2> someFile.txt
හාsomeCommand 2>> someFile.txt
ද යළි-යොමුකරයිstterr
someFile.txt කිරීමට