2014-01-23 32 views
1

我真的很想用ps -aux來得到它。 所以我寫了劇本:編寫腳本查找用戶進程的所有PID

#!/bin/bash 
if [ $# -lt 1 ]; then 
     echo -n "No arguments were written" 
     read uid 
else 
     uid=$1 
fi 
procesy=`ps -aux | awk '{if ($1=="$uid") print$2}'` 
echo $procesy 

爲什麼它不工作? 當我寫作./script root我什麼也沒有,但空白行。

+1

另一常見問題解答:請閱讀如何在'awk'中傳遞變量。 – devnull

+0

檢查你的手冊頁。 'ps'應該已經有了一個選項來輸出進程ID,而不必將它們從'ps -aux'的完整輸出中過濾出來。 – chepner

+0

對於想要關閉問題的人,如果你有一個不使用'awk'的解決方案,可以隨意添加,那麼問題不在於如何使用'awk'。 –

回答

1

在你的腳本,你必須使用內awk一個shell變量的問題。使用awk的正確方式應該是這樣的:

#!/bin/bash 
if [ $# -lt 1 ]; then 
     echo -n "No arguments were written" 
     read user 
else 
     user=$1 
fi 
procesy=`ps aux | awk -v usr=$user '{if ($1==usr) print$2}'` 
echo $procesy 
+0

爲什麼使用'awk'? –

+0

@LoïcFaure-Lacroix因爲這是關於這個問題。但我知道l0b0的[解決方案](http://stackoverflow.com/a/21308393/2353900)更好。 –

3

這將你需要的東西:

pgrep -U $1 
相關問題