成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 分享一個可以通過命令簡寫執(zhí)行對應命令的Shell腳本

分享一個可以通過命令簡寫執(zhí)行對應命令的Shell腳本

熱門標簽:電話機器人對家居行業(yè)幫助大嗎 合肥電銷外呼系統(tǒng)供應商 黑暗之魂3地圖標注 蘭州電銷機器人加盟 沈陽ai電銷智能機器人 電商外呼系統(tǒng)排名 AI智能電銷機器人壞處 如何申請400的電話呀 地圖標注審核周期

本篇文章介紹一個可以通過命令簡寫執(zhí)行對應命令的 shell 腳本。

假設這個 shell 腳本的名稱為 tinyshell.sh。

在 Linux 下進行項目開發(fā),經(jīng)常會用到一些調(diào)試開發(fā)命令。

這些命令可能比較長,需要輸入多個字符。

例如,Android 系統(tǒng)抓取全部 log 并包含 log 時間的命令是 adb logcat -b all -v threadtime。

抓取 log 是調(diào)試開發(fā)非常常見的操作,這個命令又很長,輸入起來不方便。

為了簡化輸入,可以配置一些命令簡寫來對應比較長命令。

例如,配置 ala 對應 adb logcat -b all -v threadtime。

把 als 作為參數(shù)傳遞給當前的 tinyshell.sh 腳本,會執(zhí)行該命令簡寫對應的命令。

這樣只需要輸入比較少的字符,就能執(zhí)行比較長的命令。

實際上,這個功能類似于 bash 的 alias 別名,只是將這些別名統(tǒng)一放到該腳本來處理。

可以把 tinyshell.sh 腳本作為學習 shell 腳本的參考例子,獨立維護更新,根據(jù)需要擴充更多的功能。

配置命令簡寫

如之前說明,可以用 ala 表示 adb logcat -b all -v threadtime 這個命令。

這個 ala 稱之為 “命令簡寫”。

命令簡寫使用一些簡單的字符來表示特定的命令。

可以在命令簡寫后面動態(tài)提供命令的參數(shù)。

為了方便動態(tài)添加、刪除、查詢命令簡寫,可以把這些命令簡寫保存在一個配置文件里面。

在執(zhí)行 tinyshell.sh 腳本時,會讀取配置文件內(nèi)容,獲取到各個配置項的值。

配置項的基本格式是:命令簡寫|命令內(nèi)容

每個配置項占據(jù)一行。每一行默認以第一個豎線 ‘|' 隔開命令簡寫和命令內(nèi)容。

一個參考的配置文件內(nèi)容如下所示:

ll|ls --color=auto -l
ala|adb logcat -b all -v threadtime
gl|git log
gp|git pull --stat --no-tags $(git remote) $(git rev-parse --abbrev-ref HEAD)

這里配置的命令內(nèi)容可以是系統(tǒng)支持的任意命令。

解析配置文件時,需要用到之前文章介紹的 parsecfg.sh 腳本。

要獲取 parsecfg.sh 腳本的代碼,可以查看之前的文章。

后面會提供具體測試的例子,可供參考。

腳本代碼

列出 tinyshell.sh 腳本的具體代碼如下所示。

在這個代碼中,對大部分關鍵代碼都提供了詳細的注釋,方便閱讀。

這篇文章的后面也會對一些關鍵點進行說明,有助理解。

#!/bin/bash -i
# 使用 bash 的 -i 選項,讓該腳本在交互模式下運行.
# 實現(xiàn)一個小型的 shell. 支持內(nèi)置命令、命令簡寫. 如果提供這兩種命令之外
# 的其他命令,會嘗試在 bash 中直接執(zhí)行所給命令,可以執(zhí)行系統(tǒng)支持的命令.
# 命令簡寫指的是一些簡單的字符,會對應一串實際要執(zhí)行的命令.只要輸入命令
# 簡寫就可以執(zhí)行對應的命令,減少需要輸入的字符.命令簡寫在配置文件中配置.

# 下面變量指定默認解析的配置文件名.該文件配置了命令簡寫、以及對應的命令.
# 這個 tinyshellcmds.txt 文件需要預先配置好,放到指定路徑的目錄底下.
# 直接修改這個配置文件,就可以動態(tài)添加或刪除命令簡寫.不需要修改腳本代碼.
SHORT_COMMANDS="${HOME}/.liconfig/tinyshellcmds.txt"

# PARSECFG_filepath 是 parsecfg.sh 腳本里面的變量. 如果這個變量為空,
# 說明還沒有打開過配置文件,進入下面的分支打開默認的配置文件.
if [ -z "$PARSECFG_filepath" ]; then
  # 導入解析配置文件的腳本,以便調(diào)用該腳本的函數(shù)來解析配置文件.
  source parsecfg.sh
  # 調(diào)用 parsecfg.sh 里面的 open_config_file() 函數(shù)解析配置文件.
  # 如果配置文件不存在,會返回 1,經(jīng)過'!'操作符取反為 0,會退出執(zhí)行.
  if ! open_config_file "$SHORT_COMMANDS"; then
    exit 2
  fi
fi

# 下面變量指定 tiny shell 的提示字符串.
PROMPT="TinySh>>> "

# 下面使用 basename 命令來提取出腳本的文件名,去掉目錄路徑部分.
show_help()
{
printf "USAGE
  $(basename $0) [option] [shortcmd [argument1 ... [argumentn]]]
OPTIONS
  option: 可選的選項參數(shù). 支持的選項參數(shù)描述如下:
    -h: 打印這個幫助信息.
    -l: 打印配置文件本身的內(nèi)容,會列出配置的命令簡寫和對應的命令.
    -v: 以鍵值對的方式列出命令簡寫和對應的命令.
    -i: 在配置文件中查找指定內(nèi)容.后面跟著一個參數(shù),指定要查找的內(nèi)容.
    -e: 使用 vim 打開腳本的配置文件,以供編輯.
    -a: 新增或修改一個命令簡寫和對應的命令.后面跟著一個參數(shù),用
      單引號括起來,以指定命令簡寫和命令. 格式為: 命令簡寫|命令.
      例如 -a 'p|git pull',如果p簡寫不存在則新增它,否則修改它.
    -d: 從腳本配置文件中刪除一個命令簡寫和對應的命令.后面跟著一個
      參數(shù),指定要刪除的命令簡寫.例如 -d s,會刪除命令簡寫為 s 的行.
  shortcmd: 可選選項.
    指定要直接執(zhí)行的命令簡寫. 提供命令簡寫參數(shù),不會進入 tiny shell.
  argument1 ... argumentn: 可選選項.
    指定該命令簡寫的參數(shù). 命令簡寫對應一個命令,支持動態(tài)提供參數(shù).
NOTE
  如果沒有提供任何參數(shù),默認會進入 tiny shell 解釋器. 在 tiny shell 中
  接收用戶輸入并執(zhí)行對應的命令.直到讀取到EOF、或者執(zhí)行quit命令才會退出.
"
}

# tiny shell 的內(nèi)置命令數(shù)組. 這是一個關聯(lián)數(shù)組. 數(shù)組元素的
# 鍵名是內(nèi)置命令名. 數(shù)組元素的鍵值是響應內(nèi)置命令的函數(shù)名.
declare -A BUILTIN_COMMAND=( \

  [help]="builtin_command_help" \

  [quit]="builtin_command_quit" \

  [debug]="builtin_command_debug" \

)

# bash 的 help 命令默認會打印內(nèi)置命令列表. 這里仿照這個行為,
# 讓 help 內(nèi)置命令打印內(nèi)置命令列表、以及配置文件包含的命令簡寫.
builtin_command_help()
{
printf "下面列出 Tiny Shell 支持的內(nèi)置命令列表和配置的命令簡寫列表.
輸入內(nèi)置命令名或命令簡寫,會執(zhí)行對應的命令.
也可以輸入系統(tǒng)自身支持的命令,會在 bash 中執(zhí)行所給命令.

內(nèi)置命令列表:
  debug: 所給第一個參數(shù)指定打開、或關閉調(diào)試功能. 其參數(shù)說明如下:
    on: 打開調(diào)試功能,會執(zhí)行 bash 的 set -x 命令
    off: 關閉調(diào)試功能,會執(zhí)行 bash 的 set +x 命令
  help: 打印當前幫助信息.
  quit: 退出當前 Tiny Shell.

命令簡寫列表:
"
  # 調(diào)用 parsecfg.sh 的 handle_config_option -v 打印命令簡寫列表
  handle_config_option -v
}

# quit 內(nèi)置命令. 執(zhí)行該命令會退出整個腳本,從而退出當前 tiny shell.
builtin_command_quit()
{
  exit
}

# debug 內(nèi)置命令. 所給第一個參數(shù)指定打開、或關閉調(diào)試功能.
# debug on: 打開調(diào)試功能,會執(zhí)行 bash 的 set -x 命令
# debug off: 關閉調(diào)試功能,會執(zhí)行 bash 的 set +x 命令
builtin_command_debug()
{
  if [ $# -ne 1 ]; then
    echo "Usage: debug on/off"
    return 1
  fi

  if [ "$1" == "on" ]; then
    set -x
  elif [ "$1" == "off" ]; then
    set +x
  else
    echo -e "Unknown argument: $1\nUsage: debug on/off"
  fi
  return
}

# 處理 tiny shell 內(nèi)置命令.對于內(nèi)置命令,會調(diào)用對應函數(shù)進行處理.
# 該函數(shù)的返回值表示所給命令名是否內(nèi)置命令.
# 返回 0, 表示是內(nèi)置命令. 返回 1, 表示不是內(nèi)置命令.
execute_builtin_command()
{
  # 在傳遞過來的參數(shù)中,第一個參數(shù)是命令名,剩余的參數(shù)是該命令的參數(shù).
  local cmdname="$1"
  # 從 BUILTIN_COMMAND 數(shù)組中獲取所給命令對應的處理函數(shù).
  # 如果所給命令不是內(nèi)置命令,會獲取為空.
  local cmdfunc="${BUILTIN_COMMAND["${cmdname}"]}"

  if [ -n "${cmdfunc}" ]; then
    # 將位置參數(shù)左移一位,移除命令名,剩下的就是該命令的參數(shù).
    shift 1
    ${cmdfunc} "$@"
    # 無論執(zhí)行內(nèi)置命令是否報錯,都會返回 0,表示該命令是內(nèi)置命令.
    return 0
  else
    return 1
  fi
}

# 處理 tiny shell 的命令簡寫.在所解析的配置文件中包含了支持的命令簡寫.
# 該函數(shù)的返回值表示所給命令名是否命令簡寫.
# 返回 0, 表示是命令簡寫. 返回 1, 表示不是命令簡寫.
execute_short_command()
{
  # 判斷所給的參數(shù)是否對應配置文件中的某個鍵名.如果是,將取出鍵值.
  local key="$1"
  # 從配置文件中獲取所給命令簡寫對應要執(zhí)行的命令
  local cmd_value=$(get_value_by_key "${key}")
  if test -n "${cmd_value}"; then
    # 將位置參數(shù)左移一位,移除命令簡寫,剩下的就是命令的參數(shù).
    shift 1
    # 下面要用 "$*" 來把所有參數(shù)組合成一個參數(shù),再跟命令內(nèi)容一起傳入
    # bach -c,確保 bash -c 把命令內(nèi)容和所有參數(shù)都當成要執(zhí)行的命令
    bash -c "$cmd_value $*"
    # 打印命令簡寫,以及該簡寫對應的命令,以便查看具體執(zhí)行了什么命令.
    # 先執(zhí)行命令,再打印命令內(nèi)容. 由于有些命令的輸出很多,先打印命令
    # 內(nèi)容的話,需要拉動終端滾動條,才能找到打印的命令內(nèi)容,不便于查看.
    echo -e "\e[33m命令簡寫: ${key}. 命令: ${cmd_value} $*\e[0m"
    return 0
  else
    # 如果獲取到的鍵值為空,表示所給鍵名不是有效的命令簡寫,返回 1
    return 1
  fi
}

# 處理所給的內(nèi)容.這個內(nèi)容可能是內(nèi)置命令,命令簡寫,或者命令本身.
handle_input_command()
{
  # 所給參數(shù)是要執(zhí)行的命令名、以及命令參數(shù). 如果命令名是配置的
  # 命令簡寫,會把該命令簡寫替換成對應的命令,再進行對應的命令.
  local inputcmd="$@"

  # if 語句可以直接判斷命令返回值是否為 0,并不是只能搭配 [ 命令使用.
  # 注意: 由于有的 tiny shell 內(nèi)置命令接收參數(shù),下面的 ${cmd_line}
  # 不能用雙引號括起來,否則多個參數(shù)會被當成一個參數(shù).
  if execute_builtin_command ${inputcmd}; then
    # 先調(diào)用 execute_builtin_command 函數(shù)處理內(nèi)置命令.如果所給
    # 命令是內(nèi)置命令,則調(diào)用對應的函數(shù)進行處理,且不再往下執(zhí)行.
    return 0
  elif execute_short_command ${inputcmd}; then
    # 調(diào)用 execute_short_command 函數(shù)處理命令簡寫.
    return 0
  else
    # 對于 tiny shell 不能執(zhí)行的命令,嘗試用 bash -c 在 bash 中執(zhí)行.
    bash -c "${inputcmd}"
    # 當 return 命令不加具體狀態(tài)碼時,它會返回上一條執(zhí)行命令的狀態(tài)碼.
    return
  fi
}

# SIGINT 信號的處理函數(shù).目前不做特殊處理,只是想在輸入CTRL-C后,不會終止
# 當前 tiny shell. 輸入 CTRL-C 還是可以終止 tiny shell 啟動的子 shell.
sigint_handler()
{
  # 當輸入 CTRL-C 后,終端只顯示"^C",但是不會自動換行,需要輸入回車才會
  # 換行,并重新輸出提示字符串. 而在交互式Bash中,輸入"^C"后,就會自動回
  # 車,并輸出提示字符串.這里模仿這個行為,先輸出一個回車,再輸出提示符.
  printf "\n${PROMPT}"
}

# 啟動 tiny shell 解釋器. 從標準輸入不停讀取、并執(zhí)行所給命令.直到
# 使用 CTRL-D 輸入 EOF 為止, 或者輸入 quit 命令退出當前解釋器.
start_tinyshell()
{
  # 執(zhí)行 python 命令,默認會打印 python 版本號和一句幫助提示.
  # 這里仿照這個行為,打印 tiny shel 版本號和一句幫助提示.
  echo -e "Tiny shell 1.0.0\nType 'help' for more information."

  # 捕獲SIGINT信號,以便輸入 CTRL-C 后,不會退出當前的 tiny shell.
  # 注意: 由于子shell會繼承父shell所忽略的信號,所以不能將 SIGINT 信號
  # 設成忽略,而是要指定一個處理函數(shù). 當前 shell 所捕獲的信號不會被
  # 子 shell 繼承. 所以子 shell 還是可以被 CTRL-C 終止. 即,指定信號處理
  # 函數(shù)后,當前 tiny shell 不會被CTRL-C終止.但是當前 tiny shell 執(zhí)行的
  # 命令會運行在子 shell 下,可以用 CTRL-C 終止運行在子 shell 下的命令.
  # 查看 man bash 對子 shell 的信號繼承關系說明如下:
  # traps caught by the shell are reset to the values inherited from
  # the shell's parent, and traps ignored by the shell are ignored
  trap "sigint_handler" SIGINT

  # 如果不使用 -e 選項,輸入上光標鍵, read 會讀取到 "^[[A";輸入下光標鍵,
  # read 會讀取到 "^[[B".而使用 -e 選項后,輸入上下光標鍵,不會讀取到亂碼,
  # 但是在子shell中,也不會返回歷史命令.因為shell腳本是在非交互模式下執(zhí)行.
  # 可以使用 bash 的 -i 選項讓腳本在交互模式下運行,例如: "#/bin/bash -i"
  while read -ep "${PROMPT}" input; do
    # 傳遞參數(shù)給函數(shù)時,參數(shù)要用雙引號括起來,避免參數(shù)帶有空格時,會拆分
    # 成多個參數(shù). 當輸入CTRL-C時, tiny shell 捕獲了這個信號,不會退出
    # 當前的 tiny shell.但是read命令會被中斷,此時讀取到的 input 為空.
    # 不需要對空行做處理,所以下面先判斷 input 變量值是否為空.
    if [ -n "${input}" ]; then
      handle_input_command "${input}"
      # 執(zhí)行 history -s 命令把所給的參數(shù)添加到當前歷史記錄中.后續(xù)
      # 通過上下光標鍵獲取歷史命令,就可以獲取到新添加的命令.這個只
      # 影響當前 tiny shell 的歷史記錄,不會寫入外部shell的歷史記錄.
      history -s "${input}"
    fi
  done

  # 輸出一個換行.當用戶輸入CTRL-D結(jié)束執(zhí)行后,需要換行顯示原先的終端提示符.
  echo
}

# 循環(huán)調(diào)用 getopts 命令處理選項參數(shù).
while getopts "hlvi:ea:d:" opt; do
  # 調(diào)用parsecfg.sh腳本處理選項的函數(shù)來處理 "lvi:ea:d:" 這幾個選項.
  # 如果處理成功,就直接繼續(xù)讀取下一個選項,不再往下處理.
  # handle_config_option()函數(shù)要求傳入的選項以'-'開頭,而getopts命令
  # 返回的選項不帶有'-',所以下面在 ${opt} 前面加上一個 '-'.
  handle_config_option "-${opt}" "${OPTARG}"
  if [ $? -ne 127 ]; then
    continue
  fi

  case "$opt" in
    h) show_help ;;
    ?) echo "出錯: 異常選項,請使用 -h 選項查看腳本的幫助說明." ;;
  esac
done

# $# 大于0,說明提供了命令參數(shù). $# 等于OPTIND減去1,說明傳入的參數(shù)都
# 是以 '-' 開頭的選項參數(shù). 此時,直接結(jié)束執(zhí)行,不需要再往下處理.
# 下面的 -a 表示兩個表達式都為真時才為真.表達式之間不要加小括號.
# Shell里面的小括號有特殊含義,跟C語言的小括號有些區(qū)別,加上會有問題.
if [ $# -gt 0 -a $# -eq $((OPTIND-1)) ]; then
  exit 0
fi

if [ $# -eq 0 ]; then
  # 當不帶任何參數(shù)時,默認啟用 tiny shell.
  start_tinyshell
else
  # 左移所給的命令參數(shù),去掉已處理過的選項參數(shù),只剩下非選項參數(shù).
  shift $((OPTIND-1))
  # 執(zhí)行腳本時,如果提供了非選項參數(shù),那么第一個參數(shù)認為是命令簡寫,
  # 需要執(zhí)行該命令簡寫對應的命令. 第一個參數(shù)之后的所有參數(shù)認為是
  # 命令的參數(shù). 即,可以在命令簡寫之后提供參數(shù)來動態(tài)指定一些操作.
  execute_short_command "$@"
fi

exit

代碼關鍵點說明

使用 trap 命令捕獲信號

在 bash 中,可以使用 trap 命令捕獲信號,并指定信號處理函數(shù)。

捕獲信號后,可以避免收到某個信號終止腳本執(zhí)行。

當前 tinyshell.sh 腳本使用 trap 命令捕獲 SIGINT 信號。

也就是 CTRL-C 鍵所發(fā)送的信號,避免按 CTRL-C 鍵會退出當前 tiny shell。

要注意的是,不能設置成忽略 SIGINT 信號。

在 bash 中,父 shell 所忽略的信號,也會被子 shell 所忽略。

除了內(nèi)置命令之外,當前 tiny shell 所執(zhí)行的命令運行在子 shell 下。

如果設置成忽略 SIGINT 信號,那么子 shell 也會忽略這個信號。

那么就不能用 CTRL-C 來終止子 shell 命令的執(zhí)行。

例如,Android 系統(tǒng)的 adb logcat 命令會不停打印 log,需要按 CTRL-C 來終止。

此時,在 tiny shell 里面按 CTRL-C 就不能終止 adb logcat 的執(zhí)行。

父 shell 所捕獲的信號,子 shell 不會繼承父 shell 所捕獲的信號。

子 shell 會繼承父 shell 的父進程的信號狀態(tài)。

父 shell 的父進程一般是外部 bash shell 進程。

而 bash shell 進程默認捕獲SIGINT并終止前臺進程。

即,雖然當前 tiny shell 捕獲了 SIGINT 信號,但是子 shell 并沒有捕獲該信號。

可以在 tiny shell 使用 CTRL-C 來終止子 shell 命令的執(zhí)行。

使用 history -s 命令添加歷史記錄

在 tiny shell 執(zhí)行命令后,默認不能用上下光標鍵查找到 tiny shell 自身執(zhí)行的歷史命令。

為了可以查找到 tiny shell 自身執(zhí)行的歷史命令,使用 history -s 命令添加命令到當前 shell 的歷史記錄。

這個命令只會影響當前 shell 的歷史記錄。

退出當前 shell 后,在外部 shell 還是看不到 tiny shell 所執(zhí)行的命令。

由于這個 tiny shell 主要是為了執(zhí)行命令簡寫。

這些命令簡寫只有 tiny shell 自身支持,不需要添加到 bash shell 的歷史記錄。

如果想要命令歷史信息添加到外部 shell 的歷史記錄,可以在退出 tinyshell.sh 腳本之前,執(zhí)行 history -w ~/.bash_history 命令把歷史記錄寫入到 bash 自身的歷史記錄文件。

測試例子

把 tinyshell.sh 腳本放到 PATH 變量指定的可尋址目錄下。

查看 tinyshell.sh 腳本代碼,可知要解析的配置文件名是 tinyshellcmds.txt。

把前面貼出的命令簡寫配置信息寫入 tinyshellcmds.txt 文件。

把這個文件放到 HOME 目錄的 .liconfig 目錄下。

之后,就可以開始執(zhí)行 tinyshell.sh 腳本。

當前的 tinyshell.sh 腳本可以執(zhí)行內(nèi)置命令、命令簡寫對應的命令、系統(tǒng)自身支持的命令。

當不提供任何命令參數(shù)時,會進入 tiny shell。

在 tiny shell 中,會不停接收用戶輸入并執(zhí)行對應命令。

直到讀取到 EOF 、或者執(zhí)行 quit 命令才會退出 tiny shell。

處理選項參數(shù)和直接處理命令簡寫的例子

下面是不進入 tiny shell,只處理選項參數(shù)和命令簡寫的例子:

$ tinyshell.sh -v
key='gl'    value='git log'
key='gp'    value='git pull --stat --no-tags $(git remote) $(git rev-parse --abbrev-ref HEAD)'
key='ll'    value='ls --color=auto -l'
key='ala'    value='adb logcat -b all -v threadtime'
$ tinyshell.sh ll
-rwxrwxr-x 1 xxx xxx 964 11月 14 17:37 tinyshell.sh
命令簡寫: ll. 命令: ls --color=auto -l

這里先執(zhí)行 tinyshell.sh -v 命令,用鍵值對的形式列出支持的命令簡寫。

此時,只處理所給的選項參數(shù),不會進入 tiny shell 里面。

tinyshell.sh ll 命令,提供了一個 ll 參數(shù)(兩個小寫字母 l)。

這個參數(shù)會被當成命令簡寫,然后執(zhí)行該命令簡寫對應的命令。

執(zhí)行結(jié)束后,不會進入 tiny shell 里面。

基于剛才列出的命令簡寫,可知 ll 對應 ls --color=auto -l 命令。

實際執(zhí)行的也是這個命令。

進入 tiny shell 循環(huán)處理命令的例子

當不提供任何命令參數(shù)時,會進入 tiny shell 里面,循環(huán)處理命令。

具體例子如下所示:

$ tinyshell.sh
Tiny shell 1.0.0
Type 'help' for more information.
TinySh>>> help
下面列出 Tiny Shell 支持的內(nèi)置命令列表和配置的命令簡寫列表.
輸入內(nèi)置命令名或命令簡寫,會執(zhí)行對應的命令.
也可以輸入系統(tǒng)自身支持的命令,會在 bash 中執(zhí)行所給命令.

內(nèi)置命令列表:
  debug: 所給第一個參數(shù)指定打開、或關閉調(diào)試功能. 其參數(shù)說明如下:
    on: 打開調(diào)試功能,會執(zhí)行 bash 的 set -x 命令
    off: 關閉調(diào)試功能,會執(zhí)行 bash 的 set +x 命令
  help: 打印當前幫助信息.
  quit: 退出當前 Tiny Shell.

命令簡寫列表:
key='gl'    value='git log'
key='gp'    value='git pull --stat --no-tags $(git remote) $(git rev-parse --abbrev-ref HEAD)'
key='ll'    value='ls --color=auto -l'
key='ala'    value='adb logcat -b all -v threadtime'
TinySh>>> date
2019年 12月 31日 星期二 17:46:41 CST
TinySh>>> ll -C
tinyshell.sh
命令簡寫: ll. 命令: ls --color=auto -l -C

當執(zhí)行 tinyshell.sh 命令會進入 tiny shell 時,會打印一個 “TinySh>>>” 提示符。

在 tiny shell 中執(zhí)行 help 命令可以查看支持的內(nèi)置命令和命令簡寫。

在 tiny shell 中執(zhí)行 date 命令打印當前的日期和時間。

當前的 tiny shell 自身不支持 date 命令。

這里執(zhí)行了系統(tǒng)自身的 date 命令。

最后執(zhí)行 ll -C 命令。

這里的 ll 是命令簡寫。后面的 -C 是對應命令的參數(shù)。

具體執(zhí)行的命令是 ls --color=auto -l -C。

ls 命令的 -C 選項會多列顯示文件名,覆蓋了 -l 選項的效果。

由于 -l 選項的效果被覆蓋,輸出結(jié)果沒有打印文件的詳細信息,只列出文件名。

可以看到,在命令簡寫之后,可以再提供其他的命令參數(shù)。

即,可以只配置比較長的命令前綴部分,一些簡單的參數(shù)可以動態(tài)提供。

不需要在配置文件中添加很多內(nèi)容相似、只有細微差異的配置項。

以上就是分享一個可以通過命令簡寫執(zhí)行對應命令的Shell腳本的詳細內(nèi)容,更多關于命令簡寫執(zhí)行對應命令的Shell腳本的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 監(jiān)控MySQL主從狀態(tài)的shell腳本
  • shell腳本使用兩個橫杠接收外部參數(shù)的方法
  • 使用Shell腳本如何啟動/停止Java的jar程序
  • Shell中使用grep、sed正則提取和替換字符串
  • Shell eval通過變量獲取環(huán)境變量的方法實現(xiàn)
  • shell腳本實戰(zhàn)-while循環(huán)語句
  • shell腳本--sed的用法詳解
  • linux shell中 if else以及大于、小于、等于邏輯表達式介紹
  • Linux中執(zhí)行shell腳本的4種方法總結(jié)
  • 一個不錯的shell 腳本教程 入門級
  • Shell字符串比較相等、不相等方法小結(jié)
  • python中執(zhí)行shell命令的幾個方法小結(jié)

標簽:淮南 隴南 河北 通遼 黔南 常州 黔南 河池

巨人網(wǎng)絡通訊聲明:本文標題《分享一個可以通過命令簡寫執(zhí)行對應命令的Shell腳本》,本文關鍵詞  分享,一個,可以通過,命令,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《分享一個可以通過命令簡寫執(zhí)行對應命令的Shell腳本》相關的同類信息!
  • 本頁收集關于分享一個可以通過命令簡寫執(zhí)行對應命令的Shell腳本的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    有没有片在线看www| 香港三日本三级少妇66| 亚洲精品视频三区| 在线色视频观看| 日本中文一区二区三区| 91性高潮久久久久久久| 色视频www在线播放| 亚洲精品一区av| 欧美成人家庭影院| 国产男男gay体育生网站| 黄网站色欧美视频| 色综合久久88色综合天天6| 欧美jizzhd精品欧美巨大免费| 日韩有码免费视频| 妞干网在线播放| 国产亚洲一卡2卡3卡4卡新区| 欧美三级日本三级少妇99| 日韩欧美国产一区在线观看| 在线观看视频免费一区二区三区| 亚洲欧美国产日韩中文字幕| 亚洲一区二区三区视频在线播放| 一区二区三区在线播放| 五月婷婷深深爱| 在线永久免费观看黄网站| 亚洲人午夜精品免费| 亚洲欧美一区二区久久| 日韩福利电影在线| 欧美一级黄色大片| 超碰成人久久| 久久中文视频| 国产老肥熟xxxx在线观看| 久久av中文字幕片| 国产精品男女猛烈高潮激情| 成人免费在线小视频| 国产内射老熟女aaaa| 国产视频在线一区二区| 大陆成人av片| 欧美性猛交xxxx久久久| 国产原创视频在线观看| 亚洲精品一二三四区| 日韩一区二区视频在线观看| 亚洲欧美中文字幕| 国产91ⅴ在线精品免费观看| 亚洲精品在线不卡| 欧美96在线丨欧| 国产玉足榨精视频在线观看| 91精品一区二区三区综合在线爱| 中文幕无线码中文字蜜桃| 麻豆91在线| 亚洲一区二区三区在线看| 亚洲区精品久久一区二区三区| 免费在线看污片| 高清免费观看在线| 一区二区三区亚洲变态调教大结局| av漫画在线观看| 免费av手机在线观看| 亚洲最大成人网站| 国产精品精品国产一区二区| 精品日韩在线| 青青草偷拍视频| 日韩中文字幕高清| 男人晚上看的视频| 99精品在免费线中文字幕网站一区| av电影一区| 人妻熟女一二三区夜夜爱| 一区高清视频| 欧美理论在线| 在线精品视频在线观看高清| 欧美激情免费看| 中文字幕欧美人与畜| jizz蜜桃视频在线观看| 91欧美日韩在线| 免费在线观看h片| 在线免费观看日本一区| 9i精品一二三区| 精品精品国产三级a∨在线| 久久久久久久国产精品| 精品中文av资源站在线观看| 黄色一级免费视频| 麻豆一区二区麻豆免费观看| 97精品国产综合久久久动漫日韩| 亚洲欧美日韩在线| 青青草原av在线| 欧美高清3dfreexxxx性| jizz18女人高潮| 欧美激情第六页| 182在线视频| 亚洲精品美女在线| 7777精品久久久大香线蕉小说| 国产一区二区三区91| 日韩乱码一区二区| 国产二级片在线观看| 在线视频欧美区| 日本强好片久久久久久aaa| 91看片淫黄大片91| 麻豆视频网站在线观看| 色综合久久久久久久久| 91av免费观看91av精品在线| 欧美另类极品videosbest视频| 久久国产精品免费| 欧美xxxx在线观看| 久久久久久久黄色| 亚洲欧洲日本一区二区三区| 视频一区视频二区视频三区高| 狠狠色狠狠色综合日日91app| 成人免费观看www在线| 亚洲少妇激情视频| 成人福利在线观看| 美腿丝袜在线亚洲一区| 亚洲专区中文字幕| 免费网站看黄yyy222| 视频一区视频二区欧美| 在线免费福利| 日本韩国欧美超级黄在线观看| 国产成人免费看| 国产精品综合色区在线观看| 精品视频一区 二区 三区| 高清欧美一区二区三区| 欧美一区二区三区系列电影| 看黄网站在线| 亚洲一级网站| 亚洲黄色小说在线观看| 天天操天天搞| 午夜精品福利视频网站| 国产欧美一区二区三区久久人妖| 欧美性在线观看| 男生草女生视频| 在线成人一区二区| 成人免费网站www网站高清| 国产精品免费一区二区三区| 免费啪视频在线观看| 熟女少妇在线视频播放| www.黄色av| 久久视频免费在线观看| 一区二区三区免费高清视频| 丰满少妇高潮一区二区| 综合国产在线视频| 高清日韩中文字幕| 亚洲精选中文字幕| 精品国产乱码一区二区三区| 日韩一区二区在线免费| 少妇激情综合网| 日韩欧美的一区| 国产亚洲第一伦理第一区| 三上悠亚在线一区| 国产91免费在线观看| 中文字幕欧美人妻精品| 在线电影av不卡网址| 亚洲在线视频免费| 亚洲一区av在线| 国产中文字字幕乱码无限| 肥熟一91porny丨九色丨| 亚洲乱码精品一二三四区日韩在线| 亚洲日本一区二区三区| 无码少妇一区二区三区芒果| 无码精品人妻一区二区三区影院| 日韩欧美国产高清| zztt21.su黑料网站| 91在线你懂的| 欧美成人精品欧美一级私黄| 日本在线不卡一区| 日韩精品一区二区三区在线视频| 中文字幕一区二区三区在线观看| 欧美精品成人一区二区在线观看| 免费一区二区视频| 在线一区免费观看| 99热最新网址| 成人伦理视频网站| 美女视频网站黄色亚洲| 99riav1国产精品视频| 一区二区三区韩国| 热久久免费视频精品| 成人黄色av播放免费| 在线观看av大片| 在线免费观看不卡av| 2018高清国产日本一道国产| 激情视频一区二区三区| 在线综合+亚洲+欧美中文字幕| 中文字幕乱码中文乱码51精品| 91黄色国产视频| 天天天天天天天干| 国产亚洲精品7777| 人人干人人草| 午夜宅男久久久| 精品久久久一区二区| 美女黄a一级视频| 亚洲不卡一区二区三区| 午夜成人鲁丝片午夜精品| 德国性xxxx| 亚洲精选在线| 中文字幕亚洲精品视频| 国产视频不卡一区| 精品视频国内| 人人爱人人爽| 亚洲免费一在线| 免费高清在线观看电视| 欧美精品momsxxx| 中文字幕天天干| 久久久www成人免费毛片| 二人午夜免费观看在线视频| 91亚洲国产成人精品一区二区三| 国产成人亚洲综合小说区| 国产一区二区免费视频| 日韩精品久久久久久久电影99爱| 国产色产综合产在线视频| 欧美sm一区| 亚洲一区二区高清视频| 亚洲欧洲三级电影| 一色屋色费精品视频在线观看| 俄罗斯黄色录像| www 久久久| 色女人在线视频| 色中色综合影院手机版在线观看| 欧美亚洲另类在线| 爱豆国产剧免费观看大全剧苏畅| 国产在线一区二区三区四区| 岛国片在线免费观看| 91抖音在线观看| 欧美日韩国产精品一区二区三区| xxxx黑人da| 成人福利视频导航| 欧美日韩黄色大片| 欧美丝袜美腿| 成人18夜夜网深夜福利网| 欧美一级二级在线观看| 亚洲天堂中文在线| 日本一区二区在线免费播放| 亚洲欧美日韩精品久久奇米色影视| 91av在线播放视频| 在线中文资源天堂| 日韩视频免费观看高清完整版在线观看| 亚洲自拍一区在线观看| 久久午夜电影网| 战狼4完整免费观看在线播放版| 国内老熟妇对白hdxxxx| 久色婷婷小香蕉久久| 欧美男人操女人视频| 日韩精品一区二区三区第95| 国产精品免费视频一区| 91观看网站| 亚洲一级二级片| 欧美拍拍视频| 亚洲第一免费网站| 日本激情视频在线观看| 91porn在线| 电影一区电影二区| 国内一区二区在线| 国内外成人免费激情在线视频网站| 美女黄色在线网站大全| 中文字幕另类日韩欧美亚洲嫩草| av在线第一页| av在线免费观看网址| 国产传媒在线看| 日本高清中文字幕在线| 中文字幕第66页| 夜夜嗨av一区二区三区网站四季av| 国产激情91久久精品导航| 99国产精品久久一区二区三区| 国产精品一区二区三区免费观看| 亚洲妇熟xx妇色黄| 91精品国产综合久久久蜜臀图片| 久久久噜噜噜久久中文字免| 亚洲国产精品无码观看久久| 久久夜色精品国产噜噜亚洲av| 欧美激情在线免费观看| 日韩精品成人| 99久久综合精品| 欧美精品国产白浆久久久久| 神马一区二区影院| 成人在色线视频在线观看免费大全| 91美女视频| 日韩精品在线视频观看| 国产一区二区在线不卡| 精品少妇爆乳无码av无码专区| 456亚洲影院| 欧美午夜精品| 88国产精品欧美一区二区三区| 亚洲一区二区欧美| 亚洲一区二区三区免费观看| 奇米影视在线99精品| 狠狠干狠狠操视频| 伊人久久亚洲热| 久久超碰97中文字幕| 91精品国产乱码在线观看| 最新日韩免费视频| 国产在线播放一区| 夜夜嗨av一区二区三区网站四季av| 国产主播福利在线| 国产一区二区片| 国产精品一区久久| 国产高清视频在线| 欧美成人国产va精品日本一级| 97电影在线| 精品国产二区在线| 欧美另类老女人| 日韩欧美在线视频播放| 91片黄在线观看喷潮| 波多野结衣在线一区| 国产一区二区在线免费观看| 黄色免费在线观看网站| 欧美亚洲国产成人精品| 免看一级a毛片一片成人不卡| 亚洲在线资源| 日韩av黄色在线观看| 午夜精品久久久久久久男人的天堂| 91亚洲天堂| 香蕉视频1024| 亚洲国产综合自拍| 中文精品视频一区二区在线观看| 丝袜老师办公室里做好紧好爽| a级黄色免费视频| 日本熟妇毛耸耸xxxxxx| 欧美极品少妇xxxxⅹ免费视频| 亚洲国产精华液网站w| 久操成人在线视频| a美女胸又www黄视频久久| 波多野结衣视频在线观看| cao在线视频| 91精品国产91久久久久久最新毛片| 欧美亚洲国产成人精品| 欧美日韩在线视频播放| 91麻豆精品国产91| 91九色单男在线观看| 九色精品91| 国产亚洲成av人在线观看导航| 加勒比在线一区| 欧美亚韩一区二区三区| 国产在线播放你懂的|