<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Shell on 終於明白 | tsungyi knows.</title><link>https://tsungyi.li/Blog/tags/shell/</link><description>Recent content in Shell on 終於明白 | tsungyi knows.</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 07 Nov 2022 10:14:38 +0800</lastBuildDate><atom:link href="https://tsungyi.li/Blog/tags/shell/index.xml" rel="self" type="application/rss+xml"/><item><title>Shell Tips</title><link>https://tsungyi.li/Blog/posts/shell-tips/</link><pubDate>Mon, 07 Nov 2022 10:14:38 +0800</pubDate><guid>https://tsungyi.li/Blog/posts/shell-tips/</guid><description>&lt;p&gt;記錄一些最近寫 Shell 用到的語法&lt;/p&gt;
&lt;h1 id="shellcheck"&gt;ShellCheck&lt;/h1&gt;
&lt;p&gt;如果你是使用 Visual Studio Code 強烈建議可以安裝這個套件 &lt;a href="https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck"&gt;ShellCheck&lt;/a&gt;。
可以幫你檢查 Shell 的錯誤跟提供建議的寫法。&lt;/p&gt;
&lt;h1 id="shebang"&gt;&lt;code&gt;shebang&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;相關定義可以參考 &lt;a href="https://zh.wikipedia.org/zh-tw/Shebang"&gt;維基百科&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;shebang 必須寫在 shell 的第一行，用來指示這個腳本使用的直譯器。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-shell=" data-lang="shell="&gt;#! /bin/bash

echo &amp;#34;SHELL = $SHELL&amp;#34;
echo &amp;#34;MY SHELL = $(ps -o comm -p $$ | awk &amp;#39;NR==2 { print $1}&amp;#39;)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;雖然可以用環境變數 &lt;code&gt;SHELL&lt;/code&gt; 取得使用的 Shell 不過並不是很正確。所以需要用其他命令取得正確的 Shell。&lt;/p&gt;
&lt;p&gt;在我的電腦上印出的是使用者預設的 shell 而不是 shebang 指定的 shell。使用 ps 才能拿到正確的 shell。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SHELL = /bin/zsh
MY SHELL = /bin/bash
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="常用的內建變數"&gt;常用的內建變數&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$?&lt;/code&gt;: 上一個指令或程式執行的回傳值，通常 0 代表執行成功，0 以外的數字表示失敗&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$n&lt;/code&gt;: n 是數字，表示第幾個參數&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$#&lt;/code&gt;: 參數數量&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$$&lt;/code&gt;: shell 執行的 PID&lt;/li&gt;
&lt;li&gt;如果要取得 pipeline 的其中一個階段的結果可以用 &lt;code&gt;${PIPESTATUS[n]}&lt;/code&gt; 其中的 n 是數字&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="redirect"&gt;redirect&lt;/h2&gt;
&lt;p&gt;通常會用 &lt;code&gt;&amp;gt; info.log&lt;/code&gt; 來把輸出寫到檔案，我們也可以用來將輸出寫到不同的目標 &lt;code&gt;2&amp;gt; error.log | tee output.log&lt;/code&gt;。&lt;/p&gt;</description></item></channel></rss>