bashスクリプトで実行した場合(例:これ)コンテンツをファイルに送信するには:
sudo ./bar.sh > foo
コンテンツbar.sh:
echo 'for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do kill -9 $pid &> /dev/null; done'
foo出力:
for pid in $(ps -ef | grep "smbd" | awk {print }); do kill -9 $pid &> /dev/null; done
$2
外で迷子になりました。
予想出力:
for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do kill -9 $pid &> /dev/null; done
どうやって入手できますか?
答え1
まず、sudo
必ず必要な場合以外は絶対に実行しないでください。sudo
。私はこれを十分に強調することはできません。 「Permission Denied」エラーが発生しない限り、それを使用する必要はなく、sudo
使用しないでください。したがって、実行するsudo
必要はありません。sudo ./bar.sh
./bar.sh
echo
次に、コマンド結果を得る必要はありません。これは必要ありません。
echo '$(ps -ef | grep "smbd" | awk '{print $2}')'
必要なのは、コマンド自体を実行するだけです。コマンド置換($(command)
)またはエコーは必要ありません。スクリプトに以下を追加するだけです。
ps -ef | grep "smbd" | awk '{print $2}'
実行中のプロセスのPIDを取得したい場合は、実際にはどちらも必要ありませんps
。結果に表示されるプロセス自体の問題を回避するためにこれを使用できますpgrep smbd
。grep
最後に、複数行の文字列を出力として印刷するには、次のようにします。ここに文書があります多くのechoドアの代わりに。したがって、これらすべてをまとめると、次のようになりますbar.sh
。
#!/bin/sh
cat <<'EoF'
for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do
kill -9 "$pid" &> /dev/null
done
EoF
それから実行してください./bar.sh > foo
(いいえsudo
!)。
あるいは、同じアプローチのより簡単なバージョンは次のとおりです。
#!/bin/sh
cat <<'EoF'
ps -ef | awk '/smbd/{print $2}' | while read pid; do
kill -9 "$pid" &> /dev/null
done
EoF
またはより簡単に:
#!/bin/sh
printf '%s\n' 'kill -9 $(pgrep smbd)'
最後のポイントは次のとおりです。あなたはそうですか?確かに本当に台本が欲しいですか?実行中のすべてのプロセスを終了するには、smbd
次の1つのコマンドのみが必要です。
pkill -9 smbd