これは私のスクリプトです。ここでは、ユーザーが指定したパスにあるファイルを一覧表示するために使用しています。サーバーにログインしますが、ファイルはリストされません。誰でもわかりますか?
#! /bin/bash
echo "Please give correct path"
for HOST in $(cat servers.txt ) ; do
ssha $HOST < List.sh
done
catlist.sh
#!/bin/bash
echo "Enter the path to list the files"
read $path
ls -lrt
ベストアンサー1
問題はstdinを介してスクリプトを渡しますが、スクリプト自体はstdinから読み取ろうとすることです。 stdinから渡されるスクリプトに引数を渡すには、コマンドライン引数を使用し、必要に応じて外部ループのstdinから読み取られた引数を使用することをお勧めします。
2番目の問題は、呼び出し構文がread
間違っていることです。 (なしで変数名が必要です。)また、に$
渡そうとします。それ以外の場合、入力にバックスラッシュが含まれていると、不快で予期しないことが発生します。-r
read
for i in $(cat servers.txt)
3番目の問題は、あなたが望んでいる間それをやっていることです<servers.txt while read -r i
。これは一行ずつ行われます。for
ループはファイル全体をメモリに読み込むだけでなく(大きなファイルの場合は爆発する可能性があります)、個々の行にスペースがあると失敗します。