jak vidět příkaz připojený k bash alias?
<p>předpokládejme, že mám alias v bash shell. existuje jednoduchý příkaz k vytištění, jaký příkaz bude alias spuštěn?</p>
<p>k tomu je užitečný zabudovaný <code>type</code>. to vám nejen řekne o aliasech, ale také o funkcích, vestavěných slovech, klíčových slovech a externích příkazech.</p><pre class="lang-none prettyprint-override"><code>$ type ls ls is aliased to `ls --color=auto' $ type rm rm is /bin/rm $ type cd cd is a shell builtin $ type psgrep psgrep is a function psgrep () { ps -ef | { read -r; printf '%s\n' "$reply"; grep --color=auto "$@" } } </code></pre><p><code>type -a cmd</code> zobrazí všechny příkazy pod tímto jménem v pořadí podle priority, což je užitečné pro výše uvedený alias <code>ls</code>, kde alias sám volá <code>ls</code>.</p><pre class="lang-none prettyprint-override"><code>$ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls </code></pre><p>to vám řekne, že když spustíte <code>ls</code>, <code>/bin/ls</code> bude použito a <code>--color=auto</code> bude zahrnut do seznamu argumentů, kromě všech ostatních, které sami přidáte.</p>
<p><strong> pro bash: </strong> (standardní shell v ubuntu)</p><p>chcete-li vytisknout všechny proměnné prostředí, zadejte do terminálu následující příkaz:</p><pre><code>printenv </code></pre><p>další informace o tomto příkazu naleznete na stránce <a href="http://manpages.ubuntu.com/manpages/intrepid/man1/printenv.1.html"><code>printenv</code> man</a> .</p><hr><p>chcete-li zobrazit seznam obsahující "proměnné prostředí", můžete zadat následující příkaz:</p><pre><code>( set -o posix ; set ) | less </code></pre><p>toto vám ukáže <em> nejen </em> proměnné prostředí, ale také proměnné prostředí.</p><p>pro více informací o tomto tématu čtěte:</p><ul> <li> <a href="https://stackoverflow.com/q/1305237/1505348">jak vypsat proměnné deklarované ve skriptu v bashu?</a> od <a href="http://stackoverflow.com"> tak </a> a</li> <li> <a href="https://unix.stackexchange.com/q/3510/53809">jak tisknout všechny proměnné prostředí definované (ale ne nutně exportované) v bash</a> z <a href="http://unix.stackexchange.com">nixse</a> </li> <li> <a href="https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference">proměnná prostředí vs. proměnná shell, jaký je rozdíl?</a> </li> </ul><hr><p><strong> pro zsh: </strong> (pokročilé prostředí)</p><p>použijte následující příkaz:</p><pre><code>( setopt posixbuiltin; set; ) | less </code></pre><p>další informace o možnostech zsh naleznete na stránce <a href="http://manpages.ubuntu.com/manpages/cosmic/en/man1/zshoptions.1.html"><code>zshoptions</code>man page</a> .</p> No, je tu vestavěný režim shell, který dělá zvýrazňování syntaxe, pokud to není již zapnutý, `M-x shell-script-mode`bude to pro vás.


Pokud jde o nástroj, aby skriptování jednodušší. Je tu [bash shell debugger](http://bashdb.sourceforge.net/) , takže pokud si program v bash, který by pomohl dost.


Samozřejmě je tu [eshell](http://www.emacswiki.org/emacs/CategoryEshell) , shell napsaný v Emacs Lisp, takže můžete získat všechny zvýraznění syntaxe byste očekávali od Lisp, automatické dokončování a Emacs LISP debugger. <p>použití</p><pre><code>ssh deploy@hera 'kill -9 `ps -ef | grep mapreducenode | grep -v "grep" | awk -f " " '"'"'{print $2}'"'"' | head -n 1`' </code></pre> <p><code>bash</code> ukládá do mezipaměti úplnou cestu k příkazu. ověřením, že příkaz, který se pokoušíte provést, je hashovaný příkazem <code>type</code>:</p><pre><code>$ type svnsync svnsync is hashed (/usr/local/bin/svnsync) </code></pre><p>vymazání celé mezipaměti:</p><pre><code>$ hash -r </code></pre><p>nebo jen jeden záznam:</p><pre><code>$ hash -d svnsync </code></pre><p>další informace získáte na webu <code>help hash</code> a <code>man bash</code>.</p> <p>pokud musíte zachytit všechny výstupy příkazů, můžete použít dávku jako je tato:</p><pre><code>@echo off if not "%1"=="" goto addv set var= for /f %%i in ('dir *.txt /b /o:d') do call %0 %%i set var goto end :addv set var=%var%!%1 :end </code></pre><p>všechny výstupní linky jsou uloženy v var oddělené znakem &quot;!&quot;.</p><p>@ john: existuje pro to nějaké praktické využití? myslím, že byste měli sledovat powershell nebo jakýkoli jiný programovací jazyk, který je schopen provádět skriptovací úlohy snadno (python, perl, php, ruby)</p> Použijte nástroj BCDEdit přes google najdete asi 4 příkazy které je potřeba zadat do příkazové řádky pod administrátorem (run CMD as Administrator) Byl jsem po skutečný formát má být použit na příkazovém řádku. Vidím zkompilované symboly při pohledu na vytvořené soubory, ale nejsem si jistý, jaký formát použít na příkazovém řádku. Každopádně díky za všechny odpovědi. <p>je v pořádku, aby vnořené poddotazy používaly stejné aliasy, jaké byly použity v nadřazeném dotazu, i když to může být pro někoho, kdo čte kód, matoucí. jmenný prostor pro aliasy vnořeného poddotazu je oddělený od jmenného prostoru nadřazeného. například dotaz níže obsahuje vnořený poddotaz <code>b</code>, který také obsahuje alias <code>b</code>. to by bylo potenciálně matoucí pro programátora, ale v pořádku s motorem dbms:</p><pre><code> select a.foo ,b.bar ,b.barcount from (select b.bar ,count (*) as barcount from bartable b join othertable o on b.othertableid = o.othertableid group by b.bar) b join foobar a on a.bar = b.bar </code></pre><p>na korelovaném poddotazu máte přístup k aliasu nadřazeného prvku, takže aliasy musí být jedinečné v nadřazeném dotazu a korelovaném poddotazu. vezmeme-li korelovaný poddotaz, jako je pod, máme jediný, globální jmenný prostor sdílený mezi nadřazeným dotazem a korelovaným poddotazem:</p><pre><code>select a.foo ,b.bar from foobar a join bar b on b.foobarid = a.foobarid where not exists (select 1 from bar b2 where b2.barcategoryid = b.barcategoryid and b2.bardate &gt; b.bardate) </code></pre><p>korelovaný dílčí dotaz nemá alias, protože se neúčastní spojení jako takového<sup>1</sup>. odkazy <code>b</code> a <code>b2</code> pro <code>bar</code> jsou oba k dispozici pro poddotaz, protože korelované poddotazy sdílejí svůj jmenný prostor pro aliasy s nadřazeným.</p><hr><p><sup>1</sup> všimněte si, že optimalizátor se může rozhodnout použít operátory spojení v rámci plánu v zákulisí, i když skutečnou zadanou operací je korelovaný poddotaz a nikoli spojení proti vnořenému poddotazu.</p> <p>dalším způsobem je volání tlumočníka a předání cesty ke skriptu:</p><pre><code>/bin/sh /path/to/script </code></pre><p>tečka a zdroj jsou ekvivalentní. (úprava: ne, nejsou: jak keithb zdůrazňuje v komentáři k jiné odpovědi, „.“ funguje pouze v shellech souvisejících s bashem, kde „zdroj“ pracuje v shellech souvisejících s bashem i csh.) spustí skript v - místo (jako byste zkopírovali a vložili skript přímo sem). to znamená, že všechny funkce a nelokální proměnné ve skriptu zůstanou. to také znamená, že pokud skript provede cd do adresáře, budete tam stále, když bude hotovo.</p><p>ostatní způsoby spouštění skriptu jej spustí ve vlastní podsíti. proměnné ve skriptu nejsou po dokončení stále naživu. pokud skript změnil adresáře, pak to neovlivní volající prostředí.</p><p>/ cesta/do/skript a/bin/sh skript se mírně liší. skript má obvykle na začátku „shebang“, který vypadá takto:</p><pre><code>#! /bin/bash </code></pre><p>toto je cesta k interpretovi skriptu. pokud specifikuje jiného tlumočníka než vy, když jej provedete, může se chovat odlišně (nebo nemusí fungovat vůbec).</p><p>například skripty perl a ruby skripty začínají (respektive):</p><pre><code>#! /bin/perl </code></pre><p>a</p><pre><code>#! /bin/ruby </code></pre><p>pokud spustíte jeden z těchto skriptů spuštěním <code>/bin/sh script</code>, pak nebudou vůbec fungovat.</p><p>ubuntu ve skutečnosti nepoužívá bash shell, ale velmi podobný, který se nazývá pomlčka. skripty, které vyžadují bash, mohou při volání <code>/bin/sh script</code> protože jste právě zavolali bash skript pomocí pomlčkového tlumočníka.</p><p>další malý rozdíl mezi přímým vyvoláním skriptu a předáním cesty skriptu interpretovi je, že skript musí být označen jako spustitelný, aby jej mohl přímo spustit, ale ne jej spustit předáním cesty interpretovi.</p><p>další drobná variace: můžete předponou libovolného z těchto způsobů spustit skript s evalem, takže můžete mít</p><pre><code>eval sh script eval script eval . script </code></pre><p>a tak dále. ve skutečnosti to nic nezmění, ale myslel jsem, že to zahrnuji pro důkladnost.</p> <p> <a href="http://www.johnkerl.org/doc/mail-how-to.html">tato stránka</a> podrobně popisuje interaktivní příkaz a je ve skutečnosti poměrně důkladným návodem. popisuje příkazy jako <code>z</code> a <code>z-</code>:</p><pre><code>if there is more than a screenful of messages, then z will show the next screenful, and z- will show the previous screenful. </code></pre>