stderr වෙත ප්‍රතිදානය කරන ප්‍රතිරාවය


1151

සම්මත බාෂ් මෙවලමක් තිබේද, එය ප්‍රතිරාවය ලෙස ක්‍රියා කරන නමුත් stdout වෙනුවට stderr වෙත ප්‍රතිදානය කරයි.

මට කළ හැකි බව මම දනිමි, echo foo 1>&2නමුත් එය තරමක් අවලස්සන වන අතර, දෝෂ ඇතිවිය හැකි යැයි මම සැක කරමි (උදා: දේවල් වෙනස් වූ විට සංස්කරණය කිරීමට ඇති ඉඩකඩ වැඩිය).


Answers:


1500

ඔබට මෙය කළ හැකි අතර එය කියවීමට පහසුකම් සපයයි:

>&2 echo "error"

>&2ගොනු විස්තර කරන්නා # 2 ගොනු විස්තර කරන්නා # 1 වෙත පිටපත් කරයි. එමනිසා, මෙම නැවත හරවා යැවීම සිදු කිරීමෙන් පසුව, ගොනු විස්තර කරන්නන් දෙදෙනාම එකම ගොනුවකට යොමු කරනු ඇත: එක් ගොනු විස්තර කරන්නෙකු # 2 මුලින් සඳහන් කළේ. වැඩි විස්තර සඳහා Bash Hackers Illustrated Redirection Tutorial බලන්න .


2
මම මේ උපක්‍රමය ඉගෙන ගන්නේ මීට ටික කලකට පෙරය. මෙම පිටුවට ඒ සඳහා හොඳ තොරතුරු කිහිපයක් තිබේ. tldp.org/LDP/abs/html/io-redirection.html
මාකෝ ඕරෙලියෝ

48
@BCS මම aliasෂෙල් ස්ක්‍රිප්ට් එකක භාවිතා කිරීම ගැන නොකියමි . එය භාවිතා කිරීම වඩා ආරක්ෂිත වනු ඇතerrcho(){ >&2 echo $@; }
බ්‍රැඩන් හොඳම

3
> & 2 සාමාන්‍යයෙන් අවසානයේ තබා ඇත. මෙය ක්‍රියාත්මක වනු ඇත, නමුත් එය අඩුවෙන් භාවිතා වේ
ඉස්ක්‍රෙන් අයිවොව් චර්නෙව්

168
අවුරුදු 40 කට ආසන්න කාලයක් මම යුනික්ස් වැනි පද්ධති භාවිතා කර ඇති අතර, ඔබට නැවත හරවා යැවීම ඕනෑම තැනක තැබිය හැකි නමුත් අවසානයේ දී මට එය කිසි විටෙකත් සිදු නොවීය. මේ ආකාරයට ඉදිරියෙන් තැබීමෙන් එය වඩාත් පැහැදිලිව පෙනේ (හෝ ar මාකෝ ඕරෙලියෝ පවසන පරිදි "කියවීමට පහසුකම් සපයයි"). මට අලුත් දෙයක් ඉගැන්වීම සඳහා +1.
හෙපටස්ටස්

FYI: ඔබට නූල් ප්‍රතිරාවය කිරීම හැර වෙනත් යමක් ආකෘතිකරණය කිරීමට හෝ කිරීමට අවශ්‍ය නම් නැවත හරවා යැවීම අවසානය දක්වා ගෙන යා යුතුය. උදාහරණයක් ලෙස ක්‍රියා errcho(){ >&2 echo $@|pr -To5;}නොකරනු ඇත. එවැනි දෙයක් කිරීමට ඔබට අවසාන පයිප්පයෙන් පසු නැවත හරවා යැවීම සිදු කළ යුතුය:errcho(){ echo $@|>&2 pr -To5;}
ජෝන් රෙඩ්

431

ඔබට ශ්‍රිතයක් අර්ථ දැක්විය හැකිය:

echoerr() { echo "$@" 1>&2; }
echoerr hello world

මෙය ස්ක්‍රිප්ටයකට වඩා වේගවත් වන අතර පරායත්තතා නොමැත.

කැමිලෝ මාටින්ගේ විශේෂිත යෝජනාව "මෙහි නූලක්" භාවිතා කරන අතර ප්‍රතිරාවය සාමාන්‍යයෙන් ගිල ගන්නා තර්ක (-n) ද ඇතුළුව ඔබ එයට යන ඕනෑම දෙයක් මුද්‍රණය කරයි:

echoerr() { cat <<< "$@" 1>&2; }

ග්ලෙන් ජැක්මන්ගේ විසඳුම තර්කය ගිල දැමීමේ ගැටළුව ද වළක්වයි:

echoerr() { printf "%s\n" "$*" >&2; }

7
දෝංකාරය තරමක් විශ්වාස කළ නොහැකි බව මම පැවසිය යුතුය. echoerr -ne xt"-ne xt" මුද්‍රණය කිරීමට යන්නේ නැත. ඒ සඳහා වඩා හොඳ භාවිතය printf.
කැමිලෝ මාටින්

10
ඔහ්, ඔබට ඇත්ත වශයෙන්ම බළලා ද භාවිතා කළ හැකිය:echoerr() { cat <<< "$@" 1>&2; }
කැමිලෝ මාටින්

2
මම ඒ ගැන දැනගෙන හිටියේ නැහැ. එකතු කරන ලදි.
ජේම්ස් රෝත්

5
නැතහොත්,printf "%s\n" "$*" >&2
ග්ලෙන් ජැක්මන්

4
@GKFX ඇත්ත වශයෙන්ම එය නිවැරදිව ක්‍රියාත්මක වන්නේ උපුටා දැක්වීමේදී පමණි. මිනිසුන් ඔවුන්ගේ නූල් උපුටා නොදක්වන්නේ ඇයි? (ඔබ උපුටා නොදක්වන විට $IFS, සුදු අවකාශය එකක් හෝ වැඩි ගණනකින් වෙන් කරන ලද සියල්ල වෙනම තර්කයක් ලෙස යවනු ලැබේ, එමඟින් echoඒවා 0x20s සමඟ සමපාත වේ , නමුත් උපුටා දැක්වීමේ අන්තරායන් යතුරු ලියනය කිරීමට අඩු අක්ෂර 2 ක පහසුව ඉක්මවා යයි) .
කැමිලෝ මාටින්

260

සිට 1සම්මත ප්රතිදානය වන අතර, ඔබ සුවිශේෂව වැනි නිමැවුම් හරවා යැවීමේ ඉදිරිපිට එය නම් කිරීමට ඇති නොවන >නමුත්, ඒ වෙනුවට හුදෙක් ටයිප් කළ හැක:

echo මෙම පණිවිඩය stderr> & 2 වෙත යයි

ඔබට 1>&2විශ්වාසදායක ලෙස ටයිප් කිරීමට අපහසු වනු ඇතැයි ඔබ කනස්සල්ලට පත්වන බැවින්, අතිරික්තය ඉවත් කිරීම 1ඔබට සුළු දිරිගැන්වීමක් විය හැකිය!


61

තවත් විකල්පයක්

echo foo >>/dev/stderr

4
මෙම විකල්පය අතේ ගෙන යා හැකිද? මෙය කිසියම් යුනික්ස් රසය සඳහා ක්‍රියා නොකරන්නේ දැයි යමෙක් දන්නවාද?
ඩකව්

8
/ Dev / stderr වෙත ප්‍රවේශ විය නොහැකි ඇතැම් chroots වල එය ක්‍රියා නොකරයි.
සැකරි වැන්ස්

12
මෙම පේළිය ක්‍රියාත්මක කරන ස්ක්‍රිප්ට් එක - අපි එය fooඅමතමු - එහි ස්ටෙඩර් නැවත හරවා යවා තිබේ නම් - උදා foo >foo.log 2>&1- එවිට ඊට echo foo >/dev/stderrපෙර සියලු ප්‍රතිදානයන් වසා දමනු ඇත. >>ඒ වෙනුවට භාවිතා කළ යුතුය:echo foo >>/dev/stderr
doshea

ඒ හා සමානව, ඔබට තිබේ /dev/fd/2.
jbruni

Ac ඩැකව් මෙය නිසැකවම අතේ ගෙන යා හැකි ය : /proc/self/fd/2. මගේ පිළිතුර පහතින් බලන්න :)
සෙබස්තියන්

32

නැත, එය කිරීමට සම්මත ක්‍රමය එයයි. එය දෝෂ ඇති නොකළ යුතුය.


9
එය දෝෂ ඇති නොවිය යුතුය, නමුත් මම බොහෝ දුරට ඉඩ ඇත. OTOH එය එතරම් විශාල ගනුදෙනුවක් නොවේ.
BCS

6
Ike මයික් ඩෙසිමෝන්: වෙනත් අයෙකු කේතය අවුල් කර, ප්‍රතිදානය වටා මාරු වී, ඇත්ත වශයෙන්ම බාෂ් නොදන්නේ නම්, ඔවුන්ට පහසුවෙන් අතහැර දැමිය හැකිය (හෝ වැරදි ලෙස ටයිප් කරන්න) 1>&2. මෙය සිදු නොවනු ඇතැයි අපි සැවොම ප්‍රාර්ථනා කරමු, නමුත් මට විශ්වාසයි අපි සියල්ලන්ම එය සිදු වන ස්ථාන වී ඇති බව.
කැස්කබෙල්

2
( echo something 1>&2 ; something else ) > log-> (echo something; cp some junk 1>&2 ; something else) > logඅපොයි.
BCS

31
IMHO, යමෙක් කේතය අවුල් කර බැෂ් නොදන්නේ නම්, මෙය ඔබගේ ගැටළු වලින් අවම විය හැකිය.
මයික් ඩෙසිමෝන්

8
මම හිතන්නේ එය ගැටලුවක් වීමට ඉඩ තිබේ නම්, ඔබ වෙනත් භාෂාවක් භාවිතා කිරීම ආරම්භ කළ යුතුය: මෝඩ මෝඩයෙකු බවට පත් කිරීමට උත්සාහ කිරීම මෝඩයන්ගේ ව්‍යාපාරයකි.
intuited

18

පණිවිඩය සිස්ලොග් වෙත ලොග් කිරීමට ඔබට අවශ්‍ය නැතිනම්, not_so_ugly ක්‍රමය:

logger -s $msg

-S විකල්පය යන්නෙන් අදහස් වන්නේ: "පණිවිඩය සම්මත දෝෂයකට මෙන්ම පද්ධති ලොගයට ද ප්‍රතිදානය කරන්න."


2
මේක නියමයි! එය කෙතරම් අතේ ගෙන යා හැකිද?
code_monk

_code_monk: ලොගර් විධානය IEEE Std 1003.2 ("POSIX.2") අනුකූල වේ යැයි අපේක්ෂා කෙරේ, ලොගර් විධානය util-linux පැකේජයේ කොටසක් වන අතර එය ලිනක්ස් කර්නල් ලේඛනාගාරයෙන් ලබා ගත හැකිය ⟨kernel.org/pub/linux/ utils / util-linux .
මිකු

13

සටහන: මම පශ්චාත්-පිළිතුරු සපයන්නේ නොමඟ යවන / නොපැහැදිලි "stderr වෙත ප්‍රතිදානය කරන දෝංකාරය" ප්‍රශ්නයට නොවේ (දැනටමත් OP විසින් පිළිතුරු දී ඇත).

අභිප්‍රාය පෙන්වීමට සහ ඔබට අවශ්‍ය ක්‍රියාත්මක කිරීම සඳහා ශ්‍රිතයක් භාවිතා කරන්න . උදා

#!/bin/bash

[ -x error_handling ] && . error_handling

filename="foobar.txt"
config_error $filename "invalid value!"

output_xml_error "No such account"

debug_output "Skipping cache"

log_error "Timeout downloading archive"

notify_admin "Out of disk space!"

fatal "failed to open logger!"

සහ error_handlingවීම:

ADMIN_EMAIL=root@localhost

config_error() { filename="$1"; shift; echo "Config error in $filename: $*" 2>&1; }

output_xml_error() { echo "<error>$*</error>" 2>&1; }

debug_output() { [ "$DEBUG"=="1" ] && echo "DEBUG: $*"; }

log_error() { logger -s "$*"; }

fatal() { which logger >/dev/null && logger -s "FATAL: $*" || echo "FATAL: $*"; exit 100; }

notify_admin() { echo "$*" | mail -s "Error from script" "$ADMIN_EMAIL"; }

OP හි ගැටළු විසඳීමට හේතු:

  • හැකි හොඳම සින්ටැක්ස් (කැත සංකේත වෙනුවට අර්ථවත් වචන)
  • දෝෂයක් කිරීමට අපහසුය (විශේෂයෙන් ඔබ ස්ක්‍රිප්ට් නැවත භාවිතා කරන්නේ නම්)
  • එය සම්මත බාෂ් මෙවලමක් නොවේ, නමුත් එය ඔබට හෝ ඔබේ සමාගමට / සංවිධානයට සම්මත ෂෙල් පුස්තකාලයක් විය හැකිය

වෙනත් හේතු:

  • පැහැදිලිකම - වෙනත් නඩත්තු කරන්නන්ගේ අභිප්‍රාය පෙන්වයි
  • වේගය - කාර්යයන් ෂෙල් ස්ක්‍රිප්ට වලට වඩා වේගවත්ය
  • නැවත භාවිතා කිරීමේ හැකියාව - ශ්‍රිතයකට වෙනත් ශ්‍රිතයක් ඇමතිය හැකිය
  • වින්‍යාස කිරීමේ හැකියාව - මුල් පිටපත සංස්කරණය කිරීම අවශ්‍ය නොවේ
  • නිදොස්කරණය - දෝෂයකට වගකිව යුතු රේඛාව සොයා ගැනීම පහසුය (විශේෂයෙන් ඔබ ප්‍රතිදානය හරවා යැවීමේ / පෙරීමේ ටොන් ගණනක් සමඟ අක්‍රීය නම්)
  • ශක්තිමත් බව - ශ්‍රිතයක් අස්ථානගත වී ඔබට ස්ක්‍රිප්ට් සංස්කරණය කළ නොහැකි නම්, ඔබට එකම නමක් සහිත බාහිර මෙවලමක් භාවිතා කිරීමට ආපසු යා හැකිය (උදා: ලිනක්ස් හි ල ger ු-සටහන් සඳහා log_error අන්වර්ථ කළ හැකිය)
  • ක්‍රියාත්මක කිරීම මාරු කිරීම - පුස්තකාලයේ "x" ගුණාංගය ඉවත් කිරීමෙන් ඔබට බාහිර මෙවලම් වෙත මාරු විය හැකිය
  • ප්‍රතිදාන අ nost ෙයවාදියා - එය STDERR හෝ වෙනත් ස්ථානයකට ගියහොත් ඔබට තවදුරටත් සැලකිලිමත් විය යුතු නැත
  • පුද්ගලීකරණය කිරීම - ඔබට පරිසර විචල්‍යයන් සමඟ හැසිරීම වින්‍යාසගත කළ හැකිය

11

මෙය සරල STDERR ශ්‍රිතයක් වන අතර එමඟින් නල ආදානය STDERR වෙත හරවා යවනු ලැබේ.

#!/bin/bash
# *************************************************************
# This function redirect the pipe input to STDERR.
#
# @param stream
# @return string
#
function STDERR () {

cat - 1>&2

}

# remove the directory /bubu
if rm /bubu 2>/dev/null; then
    echo "Bubu is gone."
else
    echo "Has anyone seen Bubu?" | STDERR
fi


# run the bubu.sh and redirect you output
tux@earth:~$ ./bubu.sh >/tmp/bubu.log 2>/tmp/bubu.err

2
මම හිතන්නේ ඔබට අන්වර්ථය සමඟ එකම දේ කළ හැකි අතර වඩාත් සංයුක්ත විය හැකිය
BCS

නැතහොත් ඔබට උපාංග ගොනුවට කෙලින්ම පයිප්ප දැමිය හැකිය echo what | /dev/stderr...
ardnew

11

catසමහරක් මෙහි සඳහන් කර ඇති පරිදි භාවිතා නොකරන්න . catයනු වැඩසටහන අතර echoසහ printfbash (Shell) builtins වේ. වැඩසටහනක් හෝ වෙනත් ස්ක්‍රිප්ට් එකක් දියත් කිරීම (ඉහත සඳහන් කළ) යන්නෙන් අදහස් කරන්නේ එහි සියලු වියදම් සමඟ නව ක්‍රියාවලියක් නිර්මාණය කිරීමයි. බිල්ඩින් භාවිතා කරමින්, ලිවීමේ කාර්යයන් බෙහෙවින් ලාභදායී වේ, මන්ද ක්‍රියාවලියක් (පරිසරය) නිර්මාණය කිරීමට (ක්‍රියාත්මක කිරීමට) අවශ්‍යතාවයක් නොමැති බැවිනි.

විවෘත කරන්නා අසයි “නිමැවුම් කිරීමට ( පයිප්ප ) ස්ටෙඩර්ට සම්මත මෙවලමක් තිබේද ”, පාසැල් පිළිතුර: නැත ... ඇයි? ... නැවත සකස් කිරීම පයිප්ප යනු යුනික්ස් (ලිනක්ස් ...) වැනි පද්ධතිවල අලංකාර සංකල්පයක් වන අතර බැෂ් (ෂ) මෙම සංකල්ප මත ගොඩනැඟේ.

මෙවැනි අංකනයන් සමඟ යළි හරවා යැවීම මම ආරම්භකයා සමඟ එකඟ වෙමි: &2>1නූතන ක්‍රමලේඛකයින් සඳහා එය එතරම් ප්‍රසන්න නොවේ, නමුත් එය කඩාවැටීමකි. බාෂ් විශාල හා ශක්තිමත් වැඩසටහන් ලිවීමට අදහස් නොකළ අතර, එහි අර්ථය වන්නේ අඩු යතුරුපුවරු සමඟ වැඩ කිරීමට පරිපාලකයින්ට උපකාර කිරීමයි ;-)

අවම වශයෙන්, ඔබට නැවත හරවා යැවීම පේළියේ ඕනෑම තැනක තැබිය හැකිය:

$ echo This message >&2 goes to stderr 
This message goes to stderr

1
කාර්ය සාධන හේතුව නිසා පමණක් වැඩසටහන් භාවිතා නොකරන ලෙස devs ට පැවසීම නොමේරූ ප්‍රශස්තකරණයයි. වඩා හොඳින් ක්‍රියා කරන (මිලි තත්පර අනුපිළිවෙල අනුව) තේරුම් ගැනීමට අපහසු කේතයට වඩා අලංකාර, පහසුවෙන් අනුගමනය කළ හැකි ප්‍රවේශයන් වඩාත් කැමති විය යුතුය.
ගයිපැඩොක්

1
UGuyPaddock කණගාටුයි, ඔබ මෙය නිසි ලෙස කියවා නැත. ලොම්; එය පයිප්ප නැවත හරවා යැවීම ගැන ය. (කැත) වාක්‍ය ඛණ්ඩය යළි හරවා යවන ආකාරය යමෙකුට අකමැති නම්, ඔහු බාෂ් ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම නැවැත්විය යුතුය. දෙවැනි; යස්ට් කෝල් බැෂ් බිල්ඩින් සමඟ සසඳන විට නව ප්‍රොසෙස් එකක් දියත් කිරීම කොතරම් මිල අධිකදැයි ඔබ දැනගත යුතුය.
return42

1
බාෂ් බිල්ට්-ඉන් එදිරිව කාර්ය සාධනය පිළිබඳ යමෙකුට දැන ගැනීමට ඉඩ දීම catසහ මන්දගාමී බැවින් බළලුන් භාවිතා නොකරන ලෙස යමෙකුට උපදෙස් දීම අතර වෙනසක් තිබේ . බළලා නිවැරදි තේරීම වන අසංඛ්‍යාත භාවිත අවස්ථා තිබේ, එබැවින් මම ඔබේ පිළිතුරට විරුද්ධ වෙමි.
ගයිපැඩොක්

UGuyPaddock ආරම්භකයා echoආදේශකයක් ඉල්ලා සිටියේය . ඔහු භාවිතා කළත් ඔහුට catබාෂ් යළි-යොමුවීමක් භාවිතා කිරීමට සිදුවේ. කෙසේ හෝ වේවා. එබැවින්, catමෙහි භාවිතා කිරීමට කිසිම තේරුමක් නැත . BTW මම catදිනකට 100 වතාවක් භාවිතා කරමි , නමුත් කිසි විටෙකත් විවෘත කරන්නා ඉල්ලා සිටියේ නැත ... ඔබට එය ලැබුණාද?
return42

11

මගේ යෝජනාව:

echo "my errz" >> /proc/self/fd/2

හෝ

echo "my errz" >> /dev/stderr

echo "my errz" > /proc/self/fd/2ඵලදායී ප්රතිදානය කරනු stderrනිසා /proc/selfවත්මන් ක්රියාවලිය වන සම්බන්ධයක්, සහ /proc/self/fd, එසේ නම් එම ක්රියාවලිය විවෘත ගොනු විස්තරයන් පවත්වයි, හා 0, 1හා 2වෙනුවෙන් පෙනී stdin,stdout හා stderrපිළිවෙළින්.

මෙම /proc/selfලින්ක් එක MacOS මත වැඩ, කෙසේ වෙතත්, නැත /proc/self/fd/*ලබා ගත Termux මත Android මත වන අතර, නමුත් /dev/stderr. බාෂ් ස්ක්‍රිප්ට් එකකින් මෙහෙයුම් පද්ධතිය හඳුනා ගන්නේ කෙසේද? කුමන ප්‍රභේදය භාවිතා කළ යුතුද යන්න තීරණය කිරීමෙන් ඔබේ ස්ක්‍රිප්ට් වඩාත් අතේ ගෙන යා හැකි නම් ඔබට උදව් කළ හැකිය.


5
මෙම /proc/selfමම වඩාත් සෘජු ඉදිරියට සමඟ දැනට කරන්නම් එසේ පරිභාහිර, MacOS මත වැඩ කරන්නේ /dev/stderrක්රමය. එසේම, වෙනත් පිළිතුරු / අදහස් වල සඳහන් කර ඇති පරිදි, >>එකතු කිරීම සඳහා භාවිතා කිරීම වඩා හොඳය .
මාර්ක්හූ

4
/proc/self/fd/*ඇන්ඩ්‍රොයිඩ් හි ටර්මක්ස් හි ඇත, නමුත් නැත /dev/stderr.
go2null

9

මම මෑතකදී පැකිලී ගිය තවත් විකල්පයක් මෙයයි:

    {
        echo "First error line"
        echo "Second error line"
        echo "Third error line"
    } >&2

මෙය භාවිතා කරන්නේ බහු රේඛා දෝෂ ප්‍රතිදානය අඩු දෝෂ සහිත වන අතර ( &>2සෑම පේළියකටම එක් කිරීමට මතක තබා ගත යුතු නැති නිසා ).


1
එය විශ්වාස කළ නොහැක, මම bash-redirect භාවිතා කිරීමට නිර්දේශ කරන විට ඔබ මට ඡන්දය දෙන්න. ඔබේම පිළිතුරෙන් ඔබ bash-redirect භාවිතා කරයි.
return42

1
@ return42 මම ඔබේ පිළිතුරට ඡන්දය ප්‍රකාශ කළේ ඔවුන් කළ දෙයට වඩා හොඳ පිළිතුරක් නොමැති බව OP ට පැවසූ නිසා .. එය ඇත්තෙන්ම පිළිතුරක් නොවේ. ඔබගේ පිළිතුරෙහි උප-ෂෙල් යෝජනාවක් ද මා දකින්නේ නැත ... ඔබේ පිළිතුර ඇත්ත වශයෙන්ම OP ට උපදෙස් දෙන්නේ භාවිතා නොකරන ලෙසට catහෝ වෙනත් කිසිදු උපයෝගීතාවයකට නොවන අතර එය ප්‍රශ්නයට මාතෘකාවක් නොවේ.
GuyPaddock


7

read යනු ෂෙල් බිල්ඩින් විධානයක් වන අතර එය stderr වෙත මුද්‍රණය වන අතර නැවත හරවා යැවීමේ උපක්‍රම සිදු නොකර echo ලෙස භාවිතා කළ හැකිය:

read -t 0.1 -p "This will be sent to stderr"

මෙම -t 0.1ආබාධිත විචල්ය බවට stdin එක් රේඛාව ගබඩා කිරීම, ප්රධාන ක්රියාකාරිත්වය කියවීමට බව කල් ඉකුත්වන වේ.


5
OS X හි ඇති බෑෂ් "0.1" ට ඉඩ නොදේ
ජේම්ස් රෝත්

2

පිටපතක් සාදන්න

#!/bin/sh
echo $* 1>&2

එය ඔබේ මෙවලම වනු ඇත.

ඔබට වෙනම ගොනුවක ස්ක්‍රිප්ට් එකක් අවශ්‍ය නැතිනම් ශ්‍රිතයක් කරන්න.


6
එය ශ්‍රිතයක් වීමට වඩා හොඳය (ජේම්ස් රොත්ගේ පිළිතුර වැනි), සහ පළමු තර්කයට පමණක් නොව සියලු තර්ක ඉදිරියට ගෙන යාමට වඩා හොඳය.
කැස්කබෙල්

2
ශ්‍රිතයක් වඩා හොඳ වන්නේ ඇයි? (නැතහොත්, විකල්පයක් ලෙස: "එය වඩා හොඳ වන්නේ මන්දැයි පැහැදිලි කිරීමට වඩා හොඳය ...")
ඔග්‍රේ ගීතාවලිය 33

3
G OgrePsalm33 ශ්‍රිතයක් වඩා හොඳ වීමට එක් හේතුවක් නම්, ස්ක්‍රිප්ට් එකක් අමතන විට, සාමාන්‍යයෙන් ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමට සුදුසු පරිසරයක් සැපයීම සඳහා නව ෂෙල් නිදසුනක් නිර්මාණය වේ. අනෙක් අතට, ශ්‍රිතයක් දැනට ක්‍රියාත්මක වන කවචයේ පරිසරයට ඇතුළත් වේ. මෙම අවස්ථාවෙහිදී, ශ්‍රිතයක් කැඳවීම වඩාත් කාර්යක්ෂම මෙහෙයුමක් වනු ඇති බැවින් කවචයක තවත් අවස්ථාවක් නිර්මාණය වීම වළක්වා ගත හැකිය.
ඩෙනිස් එස්ටෙන්සන්

2

ජේම්ස් රෝත් සහ ග්ලෙන් ජැක්මන් විසින් යෝජනා කරන ලද විසඳුම ඒකාබද්ධ කිරීම

  • දෝෂ පණිවිඩය රතු පැහැයෙන් පෙන්වීමට ANSI වර්ණ කේතය එක් කරන්න:
echoerr() { printf "\e[31;1m%s\e[0m\n" "$*" >&2; }

# if somehow \e is not working on your terminal, use \u001b instead
# echoerr() { printf "\u001b[31;1m%s\u001b[0m\n" "$*" >&2; }

echoerr "This error message should be RED"

-10

මැක් ඕඑස් එක්ස්: මම පිළිගත් පිළිතුර සහ තවත් පිළිතුරු කිහිපයක් අත්හදා බැලුවෙමි.

පර්ල් භාවිතයෙන් සම්මත දෝෂයකට ලිවීමට අතේ ගෙන යා හැකි ක්‍රමයක් මෙන්න:

echo WARNING! | perl -ne 'print STDERR'

lol ඔබට අවශ්‍ය සියල්ල පහත් කොට සලකන්න, නමුත් මගේ කේතය තුළ මම ඇත්ත වශයෙන්ම භාවිතා කරන විසඳුම මෙයයි!
නෝවා සුස්මාන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.