[過去ログ] くだらねえ質問はここに書き込め! Part 243 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
314(4): 2021/01/13(水)20:25 ID:a0QbcgKP(1) AAS
期待する結果を得るにはどのようにしたらよいでしょうか
■作ったスクリプト(一部)
snmp_result=$(snmpwalk -t1 -v1 -c public 10.10.10.10 .1.3.6.1.2.1.1.5.0) || cmd_result01=1)&
■これで何を期待したか
snmpwalkが成功すると→snmpwalkの結果が$snmp_resultに格納(cmd_result01=1は実行されない)
snmpwalkが失敗すると→$snmp_resultは空(書き換わらない)、$cmd_result01には1が格納される
■実際
snmpwalkが失敗しようと成功しようと、
$snmp_result、$cmd_result01の値が書き換わらない
切り分けた結果、変数のスコープじゃないかというところまでは
省2
316(1): 2021/01/13(水)21:17 ID:aIHHvY2b(1/2) AAS
>>314
サバ管業務かな懐かしい・・・
まずは、いきなり変数にほりこむんじゃなくてテキストで出力してみたら?
ログがいるよ。やっぱり。
318: 2021/01/13(水)22:04 ID:psJVVMhR(1) AAS
>>314
やったこと、期待したこと、結果が書かれた模範的な質問だ素晴らしい。
予想はおおむね正しいが多分少し認識がずれている。
(cmd; cmd)はサブシェル、つまり別プロセスで実行される。
だから子プロセスが変数に値をセットしても親プロセスに影響を与えないのは当然なのだ。
どうすればいいかというとやはり方針転換が必要で、ファイル経由で渡すとか、名前付きパイプ(mkfifo)で渡すとか。
トリッキーだけど頑張れば名前無しパイプでもできたと思う。
319: 2021/01/13(水)23:00 ID:+Xzihkx0(1/2) AAS
>>314
バックグラウンド実行は必要?必要ないなら
snmp_result=$(snmpwalk -t1 -v1 -c public 10.10.10.10 .1.3.6.1.2.1.1.5.0) || echo 1)
で失敗時はsnmp_resultに1が入るし、
バックグラウンド実行が必要なら
snmpwalk -t1 -v1 -c public 10.10.10.10 .1.3.6.1.2.1.1.5.0) &
pid=$!
wait $pid || cmd_result01=1
みたいな感じでバックグラウンド実行の結果をwaitして、失敗時はcmd_result01=1になるようにもできる。
321(1): 2021/01/13(水)23:15 ID:nmbZ/UW1(2/2) AAS
>>314
こうすればいいだけだよ
snmp_result=$(snmpwalk -t1 -v1 -c public 10.10.10.10 .1.3.6.1.2.1.1.5.0) || cmd_result01=1
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.051s