在很多的linux指令碼中,我們需要su切換使用者,來執行相應許可權的命令。如果指令碼中直接su的話,大多數情況,命令在su之後不會繼續執行。因此,我們需要換一種方式來實現su命令,在這裡,我推薦使用expect結合spawn命令來實現。
例項如下:
export cmd1="/usr/bin/impala-shell -i 192.168.1.129:21000 \r"
echo $cmd1
#我不推薦直接在expect中去寫命令,這樣很有可能的問題就是你所輸入的命令並不是你想要執行的命令
#建議使用定義變數的形式
expect -c "
#使用-c引數,expect會將後續的內容當成乙個輸入,以命令列的模式依次執行,內容用冒號括起來
spawn su - user1
#使用spawn su命令切換使用者
expect \"password:\"
#切換使用者的時候我們需要輸入這個使用者的密碼,使用expect命令模擬手工執行時會遇到的提示符
send \"\mypassword!123\r"
#使用send命令輸入我們要執行的命令,輸入的雙引號需要加反斜槓轉義
expect \"\$ \"
#此處的$字元需要加反斜槓轉義,$後面還有乙個空格不要忘記
send \"$cmd1\"
#此處命令我模擬的是impala-shell 連線有deamon的機器,進入了impala之後,提示符就會發生變化,如下
expect \"> \"
#此處的命令提示符變成了大於號加空格
send \"invalidate metadata;\r\"
#執行完invalidate metadata命令之後,如果指令碼在此處結束,很有可能不會返回結果,
#我們需要加上退出的命令,使之成為乙個閉包,保證執行的時候會有輸出
expect \"> \"
send \"exit;\r\"
#我們使用exit退出impala-shell,不要忘記send發出的命令都需要乙個\r來模擬手工輸入的回車符
#正常使用exit;就能退出,但不同的程式退出還是有些不一樣的,比如hbase,退出不需要分號,否則會報錯
這個是第一部分,在第二部分中我們討論下能否切換使用者再呼叫指令碼
linux 切換使用者命令su
su命令來切換使用者,su是switch user切換使用者的縮寫。可以是從普通使用者切換到root使用者,也可以是從root使用者切換到普通使用者。從普通使用者切換到root使用者需要輸入密碼,從root使用者切換到普通使用者不需要輸入密碼。命令格式 su 引數 使用者名稱 使用者名稱的預設值為r...
linux命令 su切換使用者
檢視當前使用者 iduid 0 root gid 0 root 組 0 root whoami root 切換到另乙個賬戶下 su dennywang echo path usr local sbin usr local bin sbin bin usr sbin usr bin root bin ...
su與su 切換使用者
本文 linux為安全計,把普通使用者設定為預設的賬戶 這一點跟windows不一樣,windows的預設使用者是管理員。由於linux的預設賬戶是普通使用者,而更改系統檔案或者執行某些命令,必需要root 即linux中的管理員 身份才能進行,這就需要從當前使用者切換到root使用者。linux中...