#! /usr/bin/tcsh -f
set ps_output = "`ps -u $user`"
@ i = 2
echo "$ps_output"
set ps_test
while ( $i <= $#ps_output )
set line = ( $ps_output[$i] )
if ( $line[4] != "ps" && $line[4] != "tcsh" && $line[4] != "zap" ) then
set ps_test = ( $ps_test $i )
endif
@ i ++
end
foreach i ( $ps_test )
set line = ( $ps_output[$i] )
set process_no = $line[1]
if ( $line[4] == "HAL9000" || $line[4] == "HALos" || $line[4] == "HALshell" || $line[4] == "HALkeyboardDriv" || $line[4] == "HALdisplayDrive" || $line[4] == "HALdiskDriver" ) then
kill -9 $process_no
endif
end
exit 0
そのため、スクリプトで設定の不一致エラーが発生し続けますが、どの設定が原因であるかがわかりません。コメントを付けても、
set ps_test
設定ミスマッチエラーが発生します。この問題を解決する方法はありますか?
ベストアンサー1
set
最初のループでこのエラーが発生します。
set line = ( $ps_output[$i] )
...出力にps
シェルのワイルドカードパターンと一致しない単語が含まれている場合(たとえば、??
2文字のファイル名を持つファイルが現在のディレクトリにない場合)
必要なものを実行するより良い(より安全な)方法は、次のようpkill
に使用することです。Craig Smallが回答に表示されますまたは少し読みやすいです。
pkill -x -u $user HAL9000 HALos HALshell HALkeyboardDrv HALdisplayDrive HALdiskDriver
(-x
名前の部分文字列だけでなく、コマンド名全体が正確に一致するように強制)または単に
pkill -u $user '^HAL'
HAL
名前がuserに属する部分文字列で始まるすべてのプロセスにシグナルを送信します$user
。
関連: