විධාන රේඛා තර්ක සැලසුම් කිරීම සඳහා හොඳ පුරුදු මොනවාද?


195

යෙදුම සංවර්ධනය කරන අතරතුර මම කල්පනා කරන්නට පටන් ගතිමි - විධාන රේඛා තර්ක සැලසුම් කළ යුත්තේ කෙසේද?

බොහෝ වැඩසටහන් මේ වගේ සූත්‍ර භාවිතා කරයි -argument valueහෝ /argument value. මගේ මතකයට ආ විසඳුම argument:value. සුදු අවකාශයන් නොමැතිව සාරධර්ම හා තර්ක අවුල් කළ හැකි ක්‍රමයක් නැති නිසා එය හොඳ යැයි මම සිතුවෙමි. වම් :අක්ෂරයෙන් පළමුවැන්න දෙකට බෙදීම පහසුය .

මගේ ප්‍රශ්න:

  1. ජනප්‍රිය -argument valueසූත්‍රය argument:value(වඩා කියවිය හැකි, ලිවීමට පහසු, දෝෂ රහිත, විශේෂ expert සංවර්ධකයින්ට තේරුම් ගැනීමට පහසු) වඩා හොඳ ද?
  2. විධාන රේඛා තර්ක සැලසුම් කිරීමේදී මා විසින් අනුගමනය කළ යුතු පොදුවේ දන්නා නීති කිහිපයක් තිබේද (එය ක්‍රියාත්මක වන්නේ නම් හැර එය හරි)?

තවත් විස්තර කිහිපයක් විමසූ විට මම එය ලබා දෙන්නෙමි. කෙසේ වෙතත් මම සිතන්නේ ඒවා පිළිතුරු වලට බලපෑම් නොකළ යුතු බවයි. ප්රශ්නය පොදුවේ හොඳ පුරුදු ගැන ය. මම හිතන්නේ ඒවා සියල්ලම සියලු වර්ගවල යෙදුම් සඳහා එක හා සමානයි.

අපි පොදු ස්ථානවල (ස්පර්ශක ටෝටම්, වගු) භාවිතා කරන යෙදුමක් මත වැඩ කරමින් සිටිමු. Qt Quick 5 (C ++, QML, JS) භාවිතයෙන් අයදුම්පත් ලියා ඇත. උපාංග වින්ඩෝස් 8.1 / 10 ස්ථාපනය කර ඇත. උපාංග කළමනාකරණය කිරීම සඳහා අපි ඉදිරිපස අතුරු මුහුණත ලබා දෙන්නෙමු. කෙසේ වෙතත් සමහර උසස් පරිපාලකයින්ට යෙදුම තනිවම වින්‍යාස කිරීමට අවශ්‍ය විය හැකිය. එය ව්‍යාපාරයේ පැත්තෙන් එතරම් වැදගත් නොවන නමුත් කිලියන් ෆොත් පැවසූ දෙයට මා එකඟ වන බැවින් මගේ යෙදුම පරිශීලකයෙකුට වේදනාවක් වීමට අවශ්‍ය නැත. මට අවශ්‍ය දේ අන්තර්ජාලයේ සොයා නොගැනීම මම මෙහි ඇසුවෙමි.


වඩාත් දියුණු කොටස් හුවමාරු පරිශීලකයින්ට: මෙම ප්‍රශ්නය සාමාන්‍ය එකක් වීමට මට අවශ්‍ය විය. සමහර විට එය ප්‍රජා විකියට සුදුසුකම් ලබයි (පවතින ප්‍රශ්නය පිළිතුරු සමඟ පරිවර්තනය කළ හැකිදැයි මම නොදනිමි). මෙම ප්‍රශ්නය මෙහෙයුම් පද්ධතිය සහ ක්‍රමලේඛන භාෂාව ස්වාධීන වීමට මට අවශ්‍ය බැවින් මෙහි දැක්වෙන පිළිතුරු වෙනත් සංවර්ධකයින්ට වටිනා පාඩමක් විය හැකිය.


14
ජනප්‍රිය විධාන රේඛා මෙවලම් වෙත අවධානය යොමු කරන්න. නිදසුනක් ලෙස, තනි යටි ඉර බොහෝ විට ඒකාබද්ධ විකල්පයන්ට ඉඩ ලබා දේ. උදා: ls -ltrවිකල්පයන් ඒකාබද්ධ කිරීම සඳහා ඔබට ලිවිය හැකිය -l, -tසහ -r. GNU විලාසිතාවේ වැඩසටහන් සාමාන්‍යයෙන් වචන මත පදනම් වූ විකල්ප --reverseවෙනුවට ද්විත්ව යටි ඉරක් සහිත විකල්පයක් ලබා දේ -r. -hඋදව් පෙන්වීම, --විකල්පවල අවසානය -සං signal ා කිරීම, ස්ටැඩින් වලින් කියවීමට ඉඩ දීම සඳහා ගොනු නාමයක් ලෙස සඳහන් කිරීම වැනි තවත් ජනප්‍රිය සම්මුතීන් ඇත
බ්‍රැන්ඩින්

73
වත් -argument valueනෑ -argument:valueබහුලව සිදු වේ. පොදු වන්නේ -a value, -avalueසහ --argument=value.
ප්‍රතිස්ථාපනය කරන්න

39
getopt(s)ඔබට හැකි තැනක ජනප්‍රිය විධාන රේඛා විග්‍රහ කිරීමේ පුස්තකාලයක් භාවිතා කරන්න (සාමාන්‍යයෙන් එය වැනි දෙයක් ලෙස හැඳින්වේ ).
ප්‍රතිස්ථාපනය කරන්න

5
3 k3b අපි Qt සමඟ වැඩ කරන්නෙමු. ලෙස කෙවින් ක්ලයින් සඳහන් ඔහුගේ අදහස අප දැනටමත් ලබා ගත හැකි පුස්තකාලය භාවිතා කළ හැකිය. එය බහු වේදිකාවක් සහ හොඳින් සිතා බලා යැයි මම සිතමි. QCommandLineParser
පිලිප් හසුබ්ස්කි

12
ඔබගේ අවසාන බොඳවීම පිළිබඳ ගැටළුව වන්නේ තර්ක විග්‍රහ කිරීම වේදිකා-ස්වාධීන ප්‍රශ්නයක් නොවන බවයි.
pydsigner

Answers:


242

POSIX පද්ධති මත (උදා: ලිනක්ස්, මැකෝස්), අවම වශයෙන් ෂෙල් පර්යන්තයකින් ආරම්භ කළ වැඩසටහන් සඳහා (උදා: ඒවායින් බොහොමයක්), මම නිර්දේශ කරන්නේ GNU කේතීකරණ සම්මුතීන් (පොදු තර්ක නාමයන් ද ලැයිස්තුගත කර ඇති) භාවිතා කර POSIX උපයෝගිතා මාර්ගෝපදේශ සොයා බලන්න , හිමිකාර මෘදුකාංග සඳහා පවා:

  • සැමවිටම හැසිරවිය යුතු --versionඅතර--help (ඒවා පවා /bin/trueපිළිගනී !!). මම මෘදුකාංග කතුවරු පේන්නේ නෑ ශාප --help, මම ඔවුන්ට වෛර කරනවා (නිසා prog --help තමයි පළමු විධාන මම නව වැඩසටහන පිළිබඳ උත්සාහ කරනවා)! බොහෝ විට --helpකෙටි ලෙස දැක්විය හැක-h

  • තිබිය --helpපණිවිඩය ලැයිස්තුව සියළුම විකල්ප (ඔබ ඔවුන් බොහෝ ... එම නඩුව ලැයිස්තුව වඩාත් පොදු අය ඇති අතර මිස පැහැදිලි ලෙසම ඇතැම් යොමු manපිටුවක් හෝ සමහර URL එක) සහ විකල්ප පෙරනිමි අගයන්, හා සමහර විට වැදගත් (සහ වැඩසටහන-විශේෂිත ) පරිසර විචල්යයන්. විකල්ප තර්ක දෝෂය මත මෙම විකල්ප ලැයිස්තු පෙන්වන්න.

  • පිළිගත -aකෙටි තර්කය (තනි ලිපිය) හා සමහර සමාන ඇති --long-argumentනිසා, -a2 --long-argument=2, --long-argument 2, ඇත්ත වශයෙන්ම ඔබට (කලාතුරකින් භාවිතා කරන විකල්ප සඳහා) යම් --only-long-argumentනමක් තිබිය හැකිය; අතිරේක විකල්පයන් නොමැතිව මෝඩල් තර්ක සඳහා -cfසාමාන්‍යයෙන් හසුරුවනු ලැබේ -c -f. එබැවින් ඔබේ -argument:valueයෝජනාව අමුතුයි, එසේ කිරීමට මම නිර්දේශ නොකරමි.

  • GLIBC භාවිතා getopt_long ෙහෝ ඊට වඩා ෙහොඳ (උදා: argp_parse , OCaml එය ගණන්වල Argමොඩියුලය , ...)

  • බොහෝ විට භාවිතා -(ඔබ, හසුරුව කරන්න බැරි නම් සම්මත ආදානය සහ ප්රතිදානය සඳහා /dev/stdinසහ /dev/stdoutඔවුන් නැති කිහිපය මෙහෙයුම් පද්ධති මත පවා)

  • බොහෝ විකල්ප විකල්ප සම්මුතීන් නැවත භාවිතා කිරීමෙන් සමාන වැඩසටහන් වල හැසිරීම අනුකරණය කිරීම ; විශේෂයෙන් -nවියළි ධාවනය සඳහා (à la make), -hඋදව් -vසඳහා, වාචිකතාව සඳහා යනාදිය ...

  • --විකල්ප සහ ගොනුව හෝ වෙනත් තර්ක අතර බෙදුම්කරු ලෙස භාවිතා කරන්න

  • ඔබේ වැඩසටහන stdinisatty ට වඩා පරීක්‍ෂා කිරීමට භාවිතා කරන්නේ නම් (සහ එම අවස්ථාවේ දී "අන්තර්ක්‍රියාකාරීව" හැසිරේ), අන්තර්ක්‍රියාකාරී නොවන මාදිලිය බල කිරීමට විකල්පයක් සපයන්න, ඒ හා සමානව ඔබේ වැඩසටහනට GUI අතුරුමුහුණතක් තිබේ නම් (සහ X11 ඩෙස්ක්ටොප් එකේ පරීක්ෂණ ) කණ්ඩායමේ හෝ විධාන රේඛාවේ භාවිතා කළ හැකිය.getenv("DISPLAY")

  • සමහර වැඩසටහන් (උදා gcc) වක්‍ර තර්ක ලැයිස්තු පිළිගනී, එබැවින් @somefile.txtඅර්ථය වන්නේ වැඩසටහන් තර්ක කියවීම somefile.txt; ඔබේ වැඩසටහන ඉතා විශාල තර්ක රාශියක් පිළිගන්නා විට මෙය ප්‍රයෝජනවත් වේ (ඔබේ කර්නලයට වඩා වැඩි ARG_MAX)

BTW, ඔබේ වැඩසටහන සහ සුපුරුදු ෂෙල් වෙඩි සඳහා ස්වයංක්‍රීය සම්පූර්ණ පහසුකම් පවා එකතු කළ හැකිය (වැනි bashහෝ zsh)

සමහර පැරණි යුනික්ස් විධානයන්ට (උදා dd, හෝ පවා sed) historical තිහාසික අනුකූලතාව සඳහා අමුතු විධාන තර්ක ඇත. ඔවුන්ගේ නරක පුරුදු අනුගමනය නොකිරීමට මම නිර්දේශ කරමි (ඔබ ඒවායින් වඩා හොඳ ප්‍රභේදයක් සාදන්නේ නැත්නම්).

ඔබගේ මෘදුකාංග සම්බන්ධ විධාන රේඛාව වැඩසටහන් මාලාවක් නම්, ආභාසය ලබා GIT (ඔබ නියත වශයෙන්ම සංවර්ධන මෙවලමක් ලෙස භාවිතා කරන), පිළිගත්තේය git helpහා git --helpහා බොහෝ gitsubcommandහාgitsubcommand--help

දුර්ලභ අවස්ථාවන්හිදී ඔබ භාවිතා කළ හැකිය argv[0](ඔබේ වැඩසටහනේ සිම්ලින්ක් භාවිතා කිරීමෙන්), උදා: වෙනස් හැසිරීමක් ( සීමිත කවචයක්) ඇති bashපරිදි ආයාචනය කිරීම . නමුත් මම සාමාන්‍යයෙන් එසේ කිරීම නිර්දේශ නොකරමි. ඔබේ වැඩසටහන ෂෙබාං භාවිතා කරමින් ස්ක්‍රිප්ට් පරිවර්තකයෙකු ලෙස භාවිතා කළ හැකි නම් එය අර්ථවත් විය හැකිය, එනම් පළමු පේළියේ ක්‍රියාත්මක කිරීම (2) . ඔබ එවැනි උපක්‍රම කරන්නේ නම්, පණිවිඩ ඇතුළුව ඒවා ලේඛනගත කිරීමට වග බලා ගන්න .rbash#!--help

POSIX හි කවචය තර්ක විතර්ක කරන බව මතක තබා ගන්න ( ඔබේ වැඩසටහන ක්‍රියාත්මක කිරීමට පෙර !), එබැවින් ෂෙල් වලින් ගැලවීමට අවශ්‍ය විකල්පවල අක්ෂර (වැනි හෝ හෝ ) අවශ්‍ය වීමෙන් වළකින්න .*$~

සමහර අවස්ථා වලදී, ඔබට ඔබේ මෘදුකාංගය තුළ ග්නූ ගයිල් හෝ ලුවා වැනි පරිවර්තකයෙකු ඇතුළත් කළ හැකිය ( ඔබ ක්‍රමලේඛන භාෂා පිළිබඳ විශේෂ expert යෙකු නොවේ නම් ඔබේම ටියුරින්-සම්පූර්ණ ස්ක්‍රිප්ටින් භාෂාව සොයා ගැනීමෙන් වළකින්න ). මෙය ඔබේ මෘදුකාංගයේ සැලසුමට ගැඹුරු ප්‍රතිවිපාක ගෙන දෙයි (එබැවින් කල්තියා සිතා බැලිය යුතුය!). එවිට ඔබට පහසුවෙන් යම් ස්ක්‍රිප්ට් එකක් හෝ යම් ප්‍රකාශනයක් එම පරිවර්ථකයා වෙත යැවිය හැකිය. ඔබ එම සිත්ගන්නාසුලු ප්‍රවේශය ගන්නේ නම්, ඔබේ මෘදුකාංගය සහ එහි අර්ථකථනය කරන ලද ප්‍රාථමිකයන් ප්‍රවේශමෙන් සැලසුම් කරන්න; ඔබට අමුතු පරිශීලකයෙකු ඔබේ දේ සඳහා විශාල ස්ක්‍රිප්ට් කේතනය කළ හැකිය.

වෙනත් අවස්ථාවල දී, ඔබේ උසස් පරිශීලකයින්ට ඔවුන්ගේ ප්ලගිනය ඔබේ මෘදුකාංගයට පැටවීමට ඉඩ දිය හැකිය ( ගතික පැටවීමේ ක්‍රම භාවිතා කරමින් à la dlopen& dlsym). නැවතත්, මෙය ඉතා වැදගත් සැලසුම් තීරණයක් (එබැවින් ප්ලගීන අතුරුමුහුණත ප්‍රවේශමෙන් නිර්වචනය කර ලේඛනගත කරන්න), තවද ඔබට මෙම ප්ලගීන වෙත වැඩසටහන් විකල්ප ලබා දීම සඳහා සම්මුතියක් අර්ථ දැක්විය යුතුය.

ඔබේ මෘදුකාංගය සංකීර්ණ දෙයක් නම්, එය සමහර වින්‍යාස ගොනු පිළිගැනීමට සලස්වන්න (ක්‍රමලේඛ තර්ක වලට අමතරව හෝ ප්‍රතිස්ථාපනය කිරීම) සහ සියලු කේත ක්‍රියාත්මක නොකර මෙම වින්‍යාස ගොනු පරීක්ෂා කිරීමට (හෝ විග්‍රහ කිරීමට) යම් ක්‍රමයක් තිබිය හැකිය. නිදසුනක් ලෙස, තැපැල් හුවමාරු නියෝජිතයෙක් (එක්සිම් හෝ පෝස්ට්ෆික්ස් වැනි) තරමක් සංකීර්ණ වන අතර, එය "අඩක් වියළීමට" හැකිවීම ප්‍රයෝජනවත් වේ (උදා: ඇත්ත වශයෙන්ම විද්‍යුත් තැපෑලක් යැවීමකින් තොරව යම් විද්‍යුත් තැපැල් ලිපිනයක් හසුරුවන ආකාරය නිරීක්ෂණය කිරීම).


/optionඑය වින්ඩෝස් හෝ වීඑම්එස් දෙයක් බව සලකන්න . එය POSIX පද්ධති මත උමතු වනු ඇත (ගොනු ධූරාවලිය /නාමාවලි බෙදුම්කරුවෙකු ලෙස භාවිතා කරන නිසාත්, කවචය ගෝලීයකරණය කරන නිසාත්). මගේ සියලු පිළිතුරු බොහෝ දුරට ලිනක්ස් (සහ පොසික්ස්) සඳහා ය.


PS හැකි නම්, ඔබේ වැඩසටහන නොමිලේ මෘදුකාංගයක් බවට පත් කරන්න , ඔබට සමහර පරිශීලකයින්ගෙන් සහ සංවර්ධකයින්ගෙන් වැඩි දියුණු කිරීම් ලැබෙනු ඇත (තවද නව වැඩසටහන් විකල්පයක් එක් කිරීම බොහෝ විට පවතින නිදහස් මෘදුකාංගයකට එක් කිරීමට පහසුම දේ වේ). එසේම, ඔබේ ප්‍රශ්නය අපේක්ෂිත ප්‍රේක්ෂකයින් මත බොහෝ දේ රඳා පවතී : යෞවනයන් සඳහා ක්‍රීඩාවක් හෝ ආච්චි සඳහා බ්‍රව්සරයක් බොහෝ විට සම්පාදකයෙකුට වඩා සමාන හා විකල්ප ප්‍රමාණයක් අවශ්‍ය නොවනු ඇත, නැතහොත් ඩේටාසෙන්ටර් සයිසැඩ්මින් සඳහා ජාල පරීක්ෂකවරයකු හෝ මයික්‍රොප්‍රොසෙසරය සඳහා CAD මෘදුකාංගයක් අවශ්‍ය නොවේ. ගෘහ නිර්මාණ ශිල්පීන් හෝ පාලම් නිර්මාණකරුවන් සඳහා. ක්‍රමලේඛන හා ස්ක්‍රිප්ටින් ගැන හුරුපුරුදු ඉංජිනේරුවෙකු බොහෝ විට ඔබේ ආච්චිට වඩා සුසර කළ හැකි විකල්ප රාශියක් තිබීමට කැමති විය හැකි අතර, X11 නොමැතිව (සමහර විට crontabරැකියාවක) ඔබගේ යෙදුම ක්‍රියාත්මක කිරීමට අවශ්‍ය වනු ඇත .


18
එකඟ වූ නමුත් git වඩා හොඳ උදාහරණයකි. මම නිර්දේශ නැහැ බලා බවට cvs2016 දී
Basile Starynkevitch

8
+ අවලංගු විකල්පයක් නම් උදව් පෙන්වන්න. උදාහරණයක් ලෙස නිෂ් less ල දෝෂ පණිවිඩයක් ලබා ගැනීම SOOOO කරදරයකි dd -h.
domen

8
GNU වැඩසටහන් --helpරීතියක් ලෙස සහාය වන නමුත් බොහෝ විට -hකරදරකාරී දේ හඳුනා නොගනී . මම සාමාන්‍යයෙන් -h ටයිප් කරන්නේ මට වැඩසටහනකට විකල්පයක් අමතක වූ විට, දිගු විකල්පය සමඟ විධානය නැවත ටයිප් කිරීම කරදරයකි --help. සියල්ලට පසු, මම යමක් අමතක කළ නිසා -h ටයිප් කළෙමි. කුමන වැඩසටහන් වලට '--help' අවශ්‍යද සහ උපකාරක තිරය පෙන්වීමට '-h' අවශ්‍ය වැඩසටහන් මොනවාදැයි පරිශීලකයා මතක තබා ගත යුත්තේ ඇයි? -H සහ --help යන දෙකටම විකල්පයක් ඇතුළත් කරන්න.
බ්‍රැන්ඩින්

30
මෙම පිළිතුරේ පළමු කොටස හොඳයි, නමුත් ඔබ සමඟ කොහේ හෝ තැනක ස්පර්ශක ඉවත් වේ. උදාහරණයක් ලෙස, වින්‍යාස ගොනු, ප්ලගීන සහ ඩොලොපන්, මෘදුකාංග බලපත්‍ර සහ වෙබ් බ්‍රව්සර් තේරීම විධාන රේඛා අතුරුමුහුණතක සම්මුතීන් සමඟ සැබවින්ම සම්බන්ධ නොවේ.
බ්‍රැන්ඩින්

5
කරුණාකරලා. ඔබ ඔබේ ප්‍රතිදානය තිරය සඳහා සංයුති කරන්නේ නම්, ප්‍රතිදාන ආකෘතියක් අභිබවා යන්න. මම ස්ක්‍රිප්ට් එකක ඒවා භාවිතා කිරීමට උත්සාහ කරන විට රේඛා කප්පාදු කරන හෝ ඔතා ඇති විධානයන්ට වඩා වැඩි යමක් මට කරදර කරන්නේ නැත.
සොබ්රික්

69

දත්ත ආකෘති සම්මුතියක් ජනප්‍රිය වීම එහි වාසියයි.

බෙදුම්කරුවෙකු ලෙස = හෝ: හෝ '' භාවිතා කිරීම සුළු සුළු වෙනස්කම් බව ඔබට පහසුවෙන්ම දැක ගත හැකිය. මිනිසෙකුට මතක තබා ගැනීම සඳහා විශාල උත්සාහයක් වනු ඇත්තේ "දැන් බලන්න, මෙම කලාතුරකින් භාවිතා කරන ලද වැඩසටහන මඟින් දේවල් සමඟ :හෝ නැතිව සීමා කර =තිබේද? හ්ම් ..."

වෙනත් වචන වලින් කිවහොත්, දෙවියන්ට ඇති ආදරය සඳහා, බලවත් හේතුවක් නොමැතිව අතිශයින්ම ශක්තිමත් වූ සම්මුතීන්ගෙන් බැහැර නොවන්න. “මගේ විද්‍යාල රචනාව සුරකින ලද වැඩසටහන” වෙනුවට “අමුතු හා කරදරකාරී cmdline සින්ටැක්ස් ඇති” ලෙස ඔබේ වැඩසටහන මිනිසුන්ට මතක ඇත.


19
සෑම භාෂාවකටම පාහේ විධාන රේඛා තර්ක හැසිරවීමට පුස්තකාල කාර්යයන් ඇත. ඒවායින් එකක් භාවිතා කරන්න.
kevin cline

9
හොඳ උපදෙස්, නමුත් එම සම්මුතීන් මොනවාද? -1
රබර් ඩක්

14
මෙම සම්මුතිය හිතාමතාම උල්ලං which නය කරන බහුලව භාවිතා වන යුනික්ස් මෙවලමක් පිළිබඳ සිත්ගන්නා උදාහරණයක් තිබේ: වාක්‍ය ඛණ්ඩයක් ddභාවිතා කරයි key=value. මෙම සැලසුම් තීරණයට හේතුව මෙම මෙවලම (අන්වර්ථ නාමය: d ata d estroyer) වැරදි ලෙස භාවිතා කරන විට විශාල හානියක් සිදුවිය හැකිය. ඔවුන්ගේ සුපුරුදු පුරුද්ද අත්හැර දැමීමට පරිශීලකයාට බල කිරීමෙන් ඔවුන් කරන්නේ කුමක්ද යන්න පිළිබඳව වඩාත් සමීපව සිතීමට පරිශීලකයාට බල කරයි.
පිලිප්

18
එයට හේතුව එය බව ඔබට විශ්වාසද dd? කර්නලයේ ARG_MAX කුඩා වූ විට, ෂෙල් වෙඩි ස්වයංක්‍රීයව සම්පුර්ණ --long-argumentsනොවූ සහ නොපවතින කාලයක (1970 දශකයේ) එය කේතනය කර ඇති බව මම විශ්වාස කරමි . එතැන් සිට වඩා හොඳ ddපසුගාමී අනුකූලතාවයක් පැවතුනි
බැසිල් ස්ටරින්කෙවිච්

9
ddවෙනත් මෙහෙයුම් පද්ධතියකින් (යුනික්ස් වලට වඩා) - අයිබීඑම් හි ඕඑස් / 360 හි ස්ක්‍රිප්ටින්-භාෂාවක් (ජේසීඑල්) - එහිදී සම්මුතීන් වෙනස් වූ අතර, යුනික්ස් වෙත වැඩි වශයෙන් හෝ අඩු නොවී වරායට ගෙන ඒමට පෙර - අර්ධ වශයෙන් එය භාවිතා කිරීමට ඉඩ ඇති අය එය දැන සිටියහ. පෙර පද්ධතිය.
බාඩ් කොපෙරුඩ්

29

ගිහියන්ගේ අර්ථයෙන්

රෝමයේදී රෝමන්වරු ලෙස හැසිරෙන්න.

  • ඔබේ CLI යෙදුම ලිනක්ස් / යුනික්ස් සඳහා අදහස් කරන්නේ නම් -p valueහෝ --parameter valueසම්මුතිය භාවිතා කරන්න . එවැනි පරාමිතීන් සහ කොඩි පහසුවෙන් විග්‍රහ කිරීමට ලිනක්ස් සතුව මෙවලම් තිබේ.

මම සාමාන්‍යයෙන් මේ වගේ දෙයක් කරනවා:

while [[ $# > 0 ]]
do
key="$1"
case $key in
    --dummy)
    #this is a flag do something here
    ;;
    --audit_sessiones)
    #this is a flag do something here
    ;;
    --destination_path)
    # this is a key-value parameter
    # the value is always in $2 , 
    # you must shift to skip over for the next iteration
    path=$2
    shift
    ;;
    *)
    # unknown option
    ;;
esac
shift
done
  • ඔබේ CLI යෙදුම වින්ඩෝස් සඳහා අදහස් කරන්නේ නම්, භාවිතා /flagකර /flag:valueසම්මුතීන් භාවිතා කරන්න .

  • ඔරකල් වැනි සමහර යෙදුම් භාවිතා නොකරයි. ඔරකල් උපයෝගිතා භාවිතය PARAMETER=VALUE.

  • මම කිරීමට කැමති එක් දෙයක් නම්, විධාන රේඛාවේ පරාමිතීන් පිළිගැනීමට අමතරව, දිග පරාමිති දාමයන් වළක්වා ගැනීම සඳහා යතුරු-අගය යුගල ගොනුවක් වන parfile භාවිතා කිරීමේ විකල්පය ලබා දීමයි . ඒ සඳහා ඔබ අතිරේක --parfile mifile.parපරාමිතියක් සැපයිය යුතුය . නිසැකවම --parfileභාවිතා කරන්නේ නම්, අනෙක් සියලුම පරාමිතීන් පාර්ෆයිල් තුළ ඇති දේට ඉවතලනු ලැබේ.

  • අතිරේක යෝජනාවක් වන්නේ සමහර අභිරුචි පරිසර විචල්‍යයන් භාවිතා කිරීමට ඉඩ දීමයි , නිදසුනක් ලෙස, පරිසර විචල්‍යය සැකසීම MYAPP_WRKSPACE=/tmpසැමවිටම සැකසීම අනවශ්‍ය කරයි --wrkspace /tmp.

  • ලිනක්ස් හි පරාමිතිය ස්වයංක්‍රීයව සම්පුර්ණ කිරීමට අමතක නොකරන්න , එයින් අදහස් කරන්නේ පරිශීලකයන්ට ස්විචයකින් අඩක් ටයිප් කර පහර දී TABෂෙල් එය සම්පූර්ණ කළ හැකි බවයි.

1
හොඳයි, GNU උපයෝගිතා කිහිපයක් (උදා gcc) @mifile.parඔබේ --parfile mifile.parයෝජනා මෙන් හැසිරවිය හැකිය .
බැසිල් ස්ටාරින්කෙවිච්

7
පරාමිති ගොනුවක් තිබේ නම් අනෙක් සියලුම විකල්ප නොසලකා හැරීම ගැන ඔබට විශ්වාසද? එය මට ප්‍රතිවිරුද්ධ බවක් පෙනේ.
ජොනතන් ලෙෆ්ලර්

8
පරාමිති ලිපිගොනු ගැන මම ජොනතන් සමඟ එකඟ වෙමි. පරාමිති ගොනුව තිබේ නම්, එය පෙරනිමි අගයන් සඳහා භාවිතා කරනු ඇතැයි මම අපේක්ෂා කරමි, විධාන රේඛාවේ දක්වා ඇති පරාමිතීන් parfile හි ඇති ඒවාට ඉහළින් යොදනු ලැබේ. කිසියම් හේතුවක් නිසා parfile එකක් භාවිතා කිරීම මඟින් අතිරේක විධාන රේඛා තර්ක භාවිතා කිරීම වළක්වනු ලැබේ නම්, අතිරේක තර්ක තිබීම දෝෂයක් විය යුතුය.
එල්ඩ්‍රිච් චීස්

LDEldritchCheese මා විසින් ලියන ලද CLI යෙදුම්වල, parfile එකක් ලබා දුන් විට, ඕනෑම අතිරේක පරාමිතියක් දෝෂයක් ජනනය කරයි.
ටියුලින්ස් කෝර්ඩෝවා

1
දක්ෂ කවචයක් භාවිතා කරන්නේ නම්, මේ ආකාරයේ "වින්‍යාස ගොනු පරාමිතිය" විකල්පය අවශ්‍ය නොවේ. උදා: ඔබ ලියන්න fooCmd -opt1 -opt2 $(cat more_options.opts). එබැවින් "වින්‍යාස ගොනු පරාමිතියක්" විකල්පයක් ලබා දී ඇත්නම් මූලික වශයෙන් එකම ආකාරයකින් ක්‍රියා කළ යුතු යැයි මම අපේක්ෂා කරමි.
බ්‍රැන්ඩින්

20

තවම නොපැමිණි එක් දෙයක්:

විධාන රේඛා තර්ක වලින් ඉහළට ඔබේ මෘදුකාංගය සැලසුම් කිරීමට උත්සාහ කරන්න . තේරුම:

ක්‍රියාකාරීත්වය සැලසුම් කිරීමට පෙර, පරිශීලක අතුරුමුහුණත සැලසුම් කරන්න.

මුල් අවදියේදී සහ පොදු අවස්ථා පිළිබඳව සරඹ කිරීමට මෙය ඔබට ඉඩ සලසයි. ඇත්ත වශයෙන්ම ඔබ තවමත් පිටත හා ඇතුළත වියුක්ත කරනු ඇත, නමුත් එය සියලු කේත ලිවීමට වඩා CLI ට පහර දීමට වඩා හොඳ ප්‍රති result ලයක් ලබා දෙනු ඇත.

තවද, docopt ( http://docopt.org/ ) බලන්න.

ඩොකොප්ට් යනු බොහෝ භාෂාවලින්, විශේෂයෙන් ඔබ දැඩි ලෙස සීමා කර ඇති පයිතන් සඳහා, ආර්ග්පාර්ස් වැනි පරිශීලක-අහිතකර තර්ක විග්‍රහ කරන්නන් තවමත් "හරි" ලෙස සලකනු ලැබේ. පාර්සර් සහ සබ්පාර්සර් සහ කොන්දේසි සහිත නියෝග වෙනුවට, ඔබ සින්ටැක්ස් උදව් නිර්වචනය කර ඇති අතර එය ඉතිරි දේ කරයි.


1
මම මෙම පිළිතුරට ප්‍රිය කරමි, ඒ සඳහා ඔබට ස්තූතියි, මන්ද මම දැනට argparseක්‍රමලේඛකයෙකු, පරිශීලක අතුරුමුහුණතක් හෝ පරිශීලක හිතකාමී කෙනෙකු නොවීම ගැන කලකිරී සිටිමි .
පූසා

මම ඩොකොප්ට් උත්සාහ කළා, මම එයට කැමති නැහැ. ක්ලික් කරන්න ප්රතිඵල බොහෝ විකල්ප ක්රම සමග ටිකක් wonkiness ඔබ subcommands ඇති වූ විට එහි වුවත්, පිරිසිදු කේතය.
jpmc26

2
මෙය වෙළඳ දැන්වීමක් වැනි වැඩිය. සම්පත අදාළ නම් එක් වරක් සඳහන් කරන්න .. නමුත් දැන් පවතින ආකාරයට ඔබේ පිළිතුරෙන් 50% ක්ම බාහිර සම්පතක් ප්‍රවර්ධනය කිරීමක් සේ පෙනේ.
බ්‍රැන්ඩින්

මම එය මුලින්ම භාවිතා කිරීමේ ආකෘතිය සැලසුම් කරන්නැයි කියමි. පරිශීලක අත්දැකීම් ක්‍රියාකාරීත්වයෙන් වෙන් කිරීම බොහෝ අවස්ථාවන්හිදී කෘතිම වෙනසක් විය හැකිය (මෙවලම් සීමාවන් අතුරු මුහුණතට බලපායි).
copper.hat

1
ඩොකොප්ට් සඳහා +1. එය මගේ සියලු CLI උභතෝකෝටිකයන් විසඳීය, සම්පූර්ණයෙන්ම වේදනාවෙන් තොරය. සමහර විට අව්‍යාජ උද්යෝගයෙන් වෙළඳ දැන්වීම් පැවසීම දුෂ්කර ය, නමුත් මෙන්න එයයි - මම දැන් වසර ගණනාවක් තිස්සේ ඩොකොප්ට් උද්යෝගිමත් අයෙක්, කිසිම ආකාරයකින් අනුබද්ධ
නොවෙමි

3

වටිනා අදහස් කිහිපයක් දැනටමත් ලබා දී ඇත (lor ෆ්ලෝරියන්, බැසිල්), නමුත් මට එකතු කිරීමට ඉඩ දෙන්න ... OP පවසයි,

උපාංග කළමනාකරණය කිරීම සඳහා අපි ඉදිරිපස අතුරු මුහුණත ලබා දෙන්නෙමු. කෙසේ වෙතත් සමහර උසස් පරිපාලකයින්ට යෙදුම තනිවම වින්‍යාස කිරීමට අවශ්‍ය විය හැකිය

නමුත් අදහස් දක්වන්නේ:

මෙම ප්‍රශ්නය වේදිකාවක් හෝ භාෂාවක් විශේෂිත වීමට මට අවශ්‍ය නොවීය

ඔබේ ඉලක්කගත ප්‍රේක්ෂකයින් සලකා බැලිය යුතුය - උසස් පරිපාලකයින් . ඔවුන් සාමාන්‍යයෙන් වැඩ කරන්නේ කුමන වේදිකාවේද - වින් / යුනික්ස් / මැක්? ඔබ යෙදුම ක්‍රියාත්මක කරන්නේ කුමන වේදිකාව මතද? එම වේදිකාව සඳහා දැනටමත් ස්ථාපිත කර ඇති ඕනෑම CLI සම්මුතීන් අනුගමනය කරන්න. ඔබේ "උසස්" පරිපාලකයින්ට GUI පදනම් කරගත් මෙවලමක් අවශ්‍යද?

ඔබට අවශ්‍ය වන්නේ අතුරු මුහුණත අභ්‍යන්තරව සහ වෙනත් පරිපාලක මෙවලම් සමඟ අනුකූල වීමයි. මම නතර කිරීමට බලාපොරොත්තු වන අතර ඒ වන හිතන්නේ නැහැ cmd -p <arg>හෝ cmd -p:<arg>හෝ cmd /p <arg>. මට උපුටා දැක්වීම් අවශ්‍යද? මට cmd -p <val1> <val2>හෝ cmd -p <val1> -p <val2>බහු ඉලක්ක සඳහා හැකිද? ඒවා ඇණවුම් විශේෂිතද? අධික ලෙස පැටවිය හැකිද? කරන්නේ cmd -p2 <arg> -p1 <arg>ද වැඩ? වන්නේද, ls -l -r -t dir1 dir2== ls -trl dir1 dir2?

මගේ යුනික්ස් පරිපාලක මෙවලම් සඳහා, හයිනර්ගේ ෂෙල්ඩෝරාඩෝ විසින් සපයන ලද මග පෙන්වීම සහ සඳහන් කර ඇති අනෙකුත් යොමු කිරීම් සමඟ මම සැමවිටම මතකයේ තබා ගතිමි .

සීඑල්අයි සැලසුම් කිරීම තරම් වැදගත් වන්නේ ඔබේ යෙදුම සැලසුම් කර ඇත්තේ විධාන රේඛා තර්ක සමඟ වැඩ කිරීමටය. එනම්, GUI වෙතින් - එනම්: GUI හි ව්‍යාපාරික තර්කනයක් හෝ GUI සහ CLI යන දෙකින්ම හැඳින්වෙන පොදු විධානය භාවිතා නොකරන්න.

බොහෝ යුනික්ස් පාදක පරිපාලන මෙවලම් සැබවින්ම විධාන රේඛා මෙවලම් ලෙස නිර්මාණය කර ඇති අතර සපයා ඇති GUI මඟින් විධාන රේඛාව සඳහා වන විකල්ප "ජනගහනය" කිරීමට පහසුකම් සපයයි. එම ප්‍රවේශය ස්වයංක්‍රීයකරණය, ප්‍රතිචාර ලිපිගොනු භාවිතා කිරීම යනාදිය සහ අත් කළමණාකරණය සඳහා ඉඩ ලබා දේ (මට අඩු වැඩ!)

සම්භාව්‍ය මෙවලම් කට්ටලය w / මෙම ප්‍රවේශය Tcl / Tk වේ. මෙවලම් මාරු කිරීමට ඔබට යෝජනා නොකරයි; GUI මත පදනම් වූ පරිපාලන යෙදුමක් යෙදුමට ලිවීමේ සිට විධාන රේඛා මෙවලමක් ලෙස නිර්මාණ ප්‍රවේශය සලකා බලන්න; පහසුව සඳහා GUI ඉහළට තට්ටු කරන්න. යම් අවස්ථාවක දී ඔබට GUI යනු වේදනා (සහ දෝෂ සහිත) බව ඔබට වැටහෙනු ඇත, ඔබට බහු වින්‍යාසයන් සිදු කළ යුතු අතර සාමාන්‍යයෙන් එකම විකල්පයන් නැවත නැවත ඇතුළත් කළ යුතු අතර ඔබ ස්වයංක්‍රීය ප්‍රවේශයක් සොයනු ඇත.

ඔබේ පරිපාලකයාට කෙසේ හෝ නිවැරදි පෙට්ටිවල නිවැරදි අගයන් ටයිප් කිරීමට සිදුව ඇති බව මතක තබා ගන්න, එබැවින් ඔබ කෙසේ හෝ w / GUI වලින් සහනයක් ලබා ගන්නේද?


නියමයි, ඔව්! එක් ප්‍රශ්නයක් ද වේ: මට ධාවනය කළ හැකිද ./this-script --hosts <hosts.txt
ෆ්ලෝරියන්
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.