書-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)
留言列表