關於使用su切換使用者之後,命令無法

2021-08-01 04:52:21 字數 1120 閱讀 2223

在很多的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中...