close

書-Linux命令行與shell腳本編程大全(第3版)

我會把使用者名稱遮住,因為要保護個人隱私(・ω・)v

 

●查看有哪些shell

○查看你是用什麼shell (這應該是看非交互式shell)

●交互式shell & 非交互式shell(interactive shell & non-interactive shell)

○如何使用別的shell?

●指令-ps --forest

○sleep

●指令-coproc 、jobs

 

命令列介面(command-Line Interface,CLI)

查看有哪些shell

不是只有bash shell可以用還有其他的可以用,要看你是哪個Linux

$ls -lF /bin/bash

$ls -lF /bin/tcsh

$ls -lF /bin/dash

$ls -lF /bin/csh

image

image

查看你是用什麼shell (這應該是看非交互式shell)

$ls -l  /bin/sh

image

交互式shell & 非交互式shell(interactive shell & non-interactive shell)

兩個shell不一定都是用相同的shell要看系統。

交互式shell:在命列列介面輸入指令所使用的shell

非交互式shell:執行檔案,把程式在文件檔裡面再執行

 

如何使用別的shell?

$  /bin/bash    //使用bash shell(他的確執行了但你看不出來) 

$bash     //也可以用這個,比較方便

$ps -f       //使用指令來看

$ exit  

shell是一個程序,運行中的程序稱為進程(process),其實我們開啟命令列介面就是開啟一個進程,也稱為父shell,我們在父shell中執行上述指令就會生成一個子shell(child shell,或subshell),他會繼承'一些'父shell的環境變數,要知道子shell繼承那些環境變數要繼續看下去。

image

指令-ps --forest

可以無限創建多個進程,使用ps --forest可以使用樹狀方式查看創建的順序。

一次執行多個命令

使用';'來達成

$ls ; ls -l /bin/sh

$(ls ; ls -l /bin/sh)

image

image

上兩行指令是有差別的,第一個指令是在命令列中執行,但是加了括號之後就變成'產生一個子shell'去執行此命令。

在尾端加上 echo $BASH_SUBSHELL 如果顯示0就是在命令列中執行,1就是產生子shell執行。

$ls ; ls -l /bin/sh ; echo $BASH_SUBSHELL

$(ls ; ls -l /bin/sh;echo $BASH_SUBSHELL)

image

image

一個括號代表了一個子shell,但是我括pwd卻沒有反應還是2?

照理來說應該要產生3個shell去執行

1. ls ; ls /bin/sh

2.pwd

3.echo $BASH_SUBSHELL

此方法並不是多線程,所以太多會拖垮執行速度

image

sleep

$sleep 2  //睡兩秒

$sleep 3000& //睡3000秒,&的意思就是在後台執行

image

image

2343就是PID的代號用ps -f查看

$ps -f

$jobs //查看後台執行進程

image

image

$(sleep 2 ; echo $BASH_SUBSHELL; sleep 2)  //睡兩秒之後執行echo之後再睡兩秒

image

$(sleep 2 ; echo $BASH_SUBSHELL; sleep 2)&

image

一開始告訴你PID的號碼之後執行echo顯示為1按下enter就會顯示下面的執行結果,期間你可以去做其他的事情(但是只有兩秒所以看不出來)。

協程-我有查過維基了,簡單講就是類似簡化版的進程,只能處理一些'東西'(詳細去看維基)

指令-coproc 、jobs

$coproc sleep 10

$jobs

image

image

image

執行完後按下enter就可以看到此訊息

上面那張圖的COPROC預設名稱,可以改名

$coproc hello { sheep 10; }    //空格很重要,要改名格是比較麻煩~

image

下集待續

https://blog.csdn.net/wisgood/article/details/52043522    交互式shell & 非交互式shell(interactive shell & non-interactive shell)

https://kknews.cc/code/r6lr454.html 進程概念

https://zh.wikipedia.org/zh-hant/%E5%8D%8F%E7%A8%8B 維基-協程 

arrow
arrow
    創作者介紹
    創作者 讀書小天地 的頭像
    讀書小天地

    書籍分享天地

    讀書小天地 發表在 痞客邦 留言(0) 人氣()