成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 JavaScript 編寫 Shell 腳本

開發 前端
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。它既是一種命令語言,又是一種程序設計語言。

作為程序員,在平時的開發中肯定少不了一些命令行操作了。當然,簡單的命令大家都是可以拿捏的,但是涉及到一些邏輯的時候還是比較頭疼的。

Shell

Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。它既是一種命令語言,又是一種程序設計語言。

Shell 腳本(shell script),是一種為 shell 編寫的腳本程序,一般文件后綴為 .sh。

Shell 編程跟 java、php 編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。

Shell 的解釋器種類眾多,常見的有:

  • sh? - 即Bourne Shell。sh? 是Unix? 標準默認的shell。
  • bash? - 即Bourne Again Shell。bash? 是Linux? 標準默認的shell。
  • fish? - 智能和用戶友好的命令行shell。
  • xiki? - 使shell 控制臺更友好,更強大。
  • zsh - 功能強大的 shell 與腳本語言。

一般在 shell 腳本的開頭,#! 告訴系統其后路徑所指定的程序即是解釋此腳本文件的 Shell 解釋器。#! 被稱作 shebang。

所以,你應該會在 shell 中,見到諸如以下的注釋:

指定 sh 解釋器:

#!/bin/sh

指定 bash 解釋器:

#!/bin/bash

zx

當然,無論哪種解釋器,對前端程序員都不算友好,有一定的學習成本。

畢竟我們只是 “切圖仔”。

開個玩笑,因為我們前端程序員的口號是:能用 JS 實現的絕對不用其他語言實現。

當然,我們也可以用 Node.js 執行一些簡單的 Shell 命令:

const { execSync } = require("child_process");

exec('git diff orgin/master', (err, data) => {
if (err) {
console.log("失敗", err);
process.exit(1);
} else {
console.log("成功", data);
}
});

但是這個體驗和直接寫 Shell 腳本相比就比較差了,我們需要手動用 child_process 進行包裝、每次引入一些額外的依賴庫、異常處理也比較麻煩、另外還要考慮轉譯命令行參數。

所以 Google 的前端程序員開源了基于 JavaScript 實現的 Shell 解釋器。zx 對 child_process 進行了默認包裝,對參數進行了轉譯而且提供了合理的默認值。可以很方便的讓我們使用前端熟悉的 JavaScript 語法來編寫 Shell 腳本:

#!/usr/bin/env zx

await $`cat package.json | grep name`

let branch = await $`git branch --show-current`
await $`dep deploy --branch=${branch}`

await Promise.all([
$`sleep 1; echo 1`,
$`sleep 2; echo 2`,
$`sleep 3; echo 3`,
])

let name = 'foo bar'
await $`mkdir /tmp/${name}`

使用

安裝(要求 Node.js 版本 >= 16.0.0):

npm i -g zx

建議將腳本寫到 .mjs 的文件里,這樣我們可以很方便的直接在頂層使用 await,然后在文件開頭聲明下面的 shebang:

#!/usr/bin/env zx

通過下面的方式運行腳本:

chmod +x ./script.mjs
./script.mjs

或者使用 zx 運行:

zx ./script.mjs

可以嘗試一下:

const list = await $`ls -a`;

console.log(list);

const name = await question('你的名字是啥? ')

console.log(`你的名字是:${name}`);

所有函數($、cd、fetch等)都可以直接使用,無需任何導入。

它還內置了很多方便的處理函數:

  • $command?:使用child_process? 的spawn? 來制定指定的命令,返回一個Promise
  • cd()?:進入其他目錄。(cd('/project'))
  • fetch():發起方洛請求
  • question()?:讀取用戶輸入,相當于readline 的封裝
  • sleep()?:等待一段時間,相當于setTimeout 的封裝
  • echo()?:大打印文本,也可以直接用console.log

更多使用可以參考官方文檔:https://github.com/google/zx。

責任編輯:趙寧寧 來源: code秘密花園
相關推薦

2012-04-26 14:02:58

ibmdw

2023-05-20 17:45:25

LinuxShell

2017-08-11 17:20:07

LinuxShell

2010-03-26 15:14:26

Python編寫

2016-09-26 14:16:18

shell腳本bash

2016-09-19 15:15:01

shellbash腳本

2017-06-26 16:04:11

LinuxShell命令

2009-11-18 13:52:30

PHP shell腳本

2011-03-01 09:30:27

LinuxScreenletPython

2019-08-14 08:03:49

LinuxShell腳本web服務

2010-03-26 15:28:05

Python編寫

2014-08-08 16:17:49

shell腳本linux

2024-08-06 09:40:21

2015-08-10 14:42:40

Explain SheShell 命令

2023-06-28 00:05:44

人工智能聊天機器人ChatGPT

2021-06-09 10:45:12

JavaScript開發 編程

2014-04-21 10:14:52

PromisesJavaScript

2016-10-08 20:58:50

awkLinux編寫腳本

2024-11-27 09:19:25

2021-05-11 07:50:31

BashShell腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲人成人一区二区在线观看 | 中文字幕一区二区三区四区五区 | 国产免费av在线 | 色就干 | 国产激情在线看 | 日韩在线不卡 | 91精品国产乱码久久久久久久 | 国产激情精品一区二区三区 | 插插插干干干 | 久久6视频 | 日韩欧美国产一区二区 | 精品国产一区二区 | 综合色久| 国产永久免费 | 日韩精品成人在线 | 久久久久免费精品国产小说色大师 | 国产精品99久久久久久www | 一区二区在线 | 好姑娘高清在线观看电影 | 亚洲黄色av网站 | 成人一区二区三区在线观看 | 男女在线免费观看 | 午夜一级大片 | 亚洲国产精品一区二区久久 | 亚洲精品一区中文字幕乱码 | 黄色日本片| 亚洲国产一区在线 | 国产欧美一区二区久久性色99 | 久久91精品国产一区二区 | 久久丝袜视频 | 九一国产精品 | 亚洲精品电影网在线观看 | 中文字幕在线观看一区 | 国产一区二区三区四区五区加勒比 | 97人澡人人添人人爽欧美 | 草草网| 成人在线观看网站 | 色视频www在线播放国产人成 | 国产成人影院 | 欧美日韩国产中文 | 在线免费看黄 |