抽出する変数は次のとおりです。
ttyACM0
ttyACM1
この変数を繰り返して、次のコマンドを実行したいと思います。
echo disconnect > /dev/ttyACM0
それから
echo disconnect > /dev/ttyACM1
動作しない現在のコードは次のとおりです。
MCCI=`ls /dev | grep "ttyACM[0-9]" | grep -v "$all_dongles"`
while IFS= read -r line
do
echo disconnect > /dev/"$line"
sleep 1
echo disconnect > /dev/"$line"
sleep 1
echo disconnect > /dev/"$line"
done <<< "$MCCI"
コードは現在ttyACM0を上書きしていますが、これは明らかに私が望むものではありません。そうすることをお勧めしますので、同じ接続解除コードを3回発行し、ループを切断した後も上記と同じ接続コードを発行する必要がありました。完全なコードはSSHを介して実行されます。
修正する SSHを介してコンピュータに接続し、ユーザーに入力するように求めるドングルのシリアル番号を確認しようとしています。ユーザーが提供したシリアル番号と一致しない不要なドングルを分離する必要があります。そのためには、どのMCCIがどのドングルに対応しているかを確認する必要があります。すべてのドングルとMCCIは/ dev / ttyACM [0-9]です。私の考えは、すべてのMCCIを切断し(MCCI変数のために数字を知っています)、一度に1つずつ再びオンにして、現在どのドングルが接続されているかを確認することです。 grepドングルのシリアル番号を見つけて、対応するMCCI ttyACM#に接続し、アレイに追加して再接続を解除し、アレイを繰り返してシリアル番号を検索し、そのttyACM#を削除してドングルを接続する予定です。
3つの変数ドングルとMCCIがあります。 - ls / dev | grep "ttyACM[0-9]"
dongle - シリアル番号、ttyACM[0-9]など、ドングルに関する情報を返す同様の変数です。
MCCI は、ドングル変数と MCCI 変数で既知のドングルを除外します。
答え1
設定方法とは別に、MCCI
変数の各テキスト行を繰り返すアプローチは意味がありますが、変数をまったく使用しない方が簡単かもしれません。代わりにワイルドカードファイルの指定を繰り返すだけです/dev/
。
all_dongles='
/dev/ttyACM4
/dev/ttyACM9
/dev/ttyACM7
'
for line in /dev/ttyACM[0-9]
do
if grep -Fqx "$line" <<<"$all_dongles"
then
: # skip
else
# ... do something with $line
fi
done
答え2
正直なところ、入力に項目を区切る「改行」に加えて、他のスペースに似た文字を含めることはできないことを知っているので、簡単な方法
for device in /dev/ttyACM{0..9}*; do
{echo $(basename "$device") | grep "$alldongles"} && continue
for run in {1..3}; do
echo disconnect > "$device"
sleep 1
done
done
します。ls
出力を解析できません。、一度!
答え3
[237]
ドングルに関連付けられているデバイス名の末尾にある数字と一致すると仮定します(と書くこともできます2|3|7
)。
shopt -s extglob
dongle='[237]'
for device in /dev/ttyACM!($dongle); do
printf '%s\n' disconnect disconnect disconnect >"$device"
done
拡張ワイルドカードパターンは、数字2、3、または7で/dev/ttyACM!([237])
始まりますが終了しない/dev/ttyACM
すべてのパス名と一致します。
ループの本文は、文字列をdisconnect
デバイスに3回印刷します。