echo以降、上記のコマンドの出力は次のようになります。
# echo systemctl\ {restart,status}\ sshd\;
systemctl restart sshd; systemctl status sshd;
出力を端末に貼り付けても、コマンドは引き続き機能します。ただし、コマンドを直接実行しようとすると、次の結果が表示されます。
# systemctl\ {restart,status}\ sshd\;
bash: systemctl restart sshd;: command not found...
2つの質問があります。
- この代替方法と拡張方法は正確に何ですか? (それで私はそれを調べて、それについてもっと学び、正しく使用する方法を学ぶことができます)。
- 私がここで何を間違っているのか?なぜ動作しないのですか?
ベストアンサー1
それは形ですサポート拡張シェルで完了しました。支柱の拡張という概念は正しいですが、ここで使用されている方法は正しくありません。これを行うとき:
systemctl\ {restart,status}\ sshd\;
シェルはこれをsystemctl restart sshd;
長いコマンドとして解釈して実行しようとしますが、この方法で実行するバイナリを見つけることができません。この段階では、シェルは引数を使用して完全なコマンドを作成する前に、コマンドラインのエントリにタグを付けようとしましたが、まだそのようなことは発生していません。
これらの既知の拡張値の場合は使用できますeval
が、それでも安全ですが、それを使用して拡張したいものが何であるかを確認してください。
eval systemctl\ {restart,status}\ sshd\;
for
しかし、私は行を書いたり、次を使うよりもループを使いたいと思いますeval
。
for action in restart status; do
systemctl "$action" sshd
done