書-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
![]()
![]()
查看你是用什麼shell (這應該是看非交互式shell)
ls -l /bin/sh
![]()
交互式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繼承那些環境變數要繼續看下去。

指令-ps --forest
可以無限創建多個進程,使用ps --forest可以使用樹狀方式查看創建的順序。
一次執行多個命令
使用';'來達成
ls ; ls -l /bin/sh
(ls ; ls -l /bin/sh)


上兩行指令是有差別的,第一個指令是在命令列中執行,但是加了括號之後就變成'產生一個子shell'去執行此命令。
在尾端加上 echo BASH_SUBSHELL 如果顯示0就是在命令列中執行,1就是產生子shell執行。
ls ; ls -l /bin/sh ; echo BASH_SUBSHELL
(ls ; ls -l /bin/sh;echo BASH_SUBSHELL)


一個括號代表了一個子shell,但是我括pwd卻沒有反應還是2?
照理來說應該要產生3個shell去執行
1. ls ; ls /bin/sh
2.pwd
3.echo BASH_SUBSHELL
此方法並不是多線程,所以太多會拖垮執行速度

sleep
sleep 2 //睡兩秒
sleep 3000& //睡3000秒,&的意思就是在後台執行
![]()
![]()
2343就是PID的代號用ps -f查看
ps -f
jobs //查看後台執行進程


(sleep 2 ; echo BASH_SUBSHELL; sleep 2) //睡兩秒之後執行echo之後再睡兩秒
![]()
(sleep 2 ; echo BASH_SUBSHELL; sleep 2)&

一開始告訴你PID的號碼之後執行echo顯示為1按下enter就會顯示下面的執行結果,期間你可以去做其他的事情(但是只有兩秒所以看不出來)。
協程-我有查過維基了,簡單講就是類似簡化版的進程,只能處理一些'東西'(詳細去看維基)
指令-coproc 、jobs
coproc sleep 10
jobs
![]()

![]()
執行完後按下enter就可以看到此訊息
上面那張圖的COPROC預設名稱,可以改名
coproc hello { sheep 10; } //空格很重要,要改名格是比較麻煩

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