私は非常に単純なTelnet bashスクリプトを実行しており、動作します。
#!/bin/sh
host=90.205.177.129
port=23
login=admin
passwd=Sky.2015
#cmd1=sh
cmd2=meminfo > /tmp/top.txt
echo open ${host} ${port}
sleep 5
echo ${login}
sleep 5
echo ${passwd}
sleep 10
#echo ${cmd1}
#sleep 5
echo ${cmd2}
sleep 20
echo exit
ただし、meminfoの出力は "top.txt"ファイルにコピーされません。ファイルが作成されました。
root@raspberrypi:/etc/my_scripts# ls -l /tmp/
total 12
-rw-r--r-- 1 root root 784 Oct 13 14:32 1wall_test1_S.txt
-rw-r--r-- 1 root root 216 Oct 14 11:28 test_l.txt
-rw-r--r-- 1 root root 216 Oct 14 11:37 test_s.txt
-rwxrwxrwx 1 root root 0 Oct 15 09:35 top.txt
root@raspberrypi:/etc/my_scripts#
どんな提案がありますか?
答え1
問題は
cmd2=meminfo > /tmp/top.txt
これは実際に変数をcmd2
次に設定します。メモリ情報リダイレクトを評価します。これを引用する必要があります。
cmd2='meminfo > /tmp/top.txt'
編集する:これにより、ターゲットにファイルが生成されます。自分の答えに基づいてスクリプトが実行されているシステムで生成しようとしています(元の質問には記載されていません)。理由はまだ有効ですが、解決策はもはや有効ではありません。
答え2
alias cmd2="meminfo > /tmp/top.txt"
という環境変数を使用する代わりに、エイリアス付きのコマンドを作成するために使用されますcmd2
。
答え3
解決策を直接見つけました:)
./telnet.sh | telnet > /tmp/top.txt
これにより、コマンドが出力ファイルにリダイレクトされます。しかし、同じスクリプトを複数回実行する必要があり、同じファイルを上書きしたくはありませんが、デルタファイルを作成します(DATEコマンドを使用して名前を変更することをお勧めします)。
日付オプションの使用
./telnet.sh | telnet > /tmp/top-$(date +%Y%m%d-%T).txt