nicely formatted directory listing from batch ssh session

Hi,

I am really struggling to finish of a script I have been assigned.
The script's purpose is to log on to each server defined in an array, determine the Web Server version, and list the directory beneath the installation directory. In my case, this installation directory is almost always "/opt/IBMHTTPServer" (sometimes "/opt/IBMHttpServer")

Here's a snippet from the code.

for host in ${Hosts}
do
  AssumedDir=$(batch_ssh ${host} "ls -1 /opt")
  if [[ ${AssumedDir} = *IBMHTTPServer*  ]]; then
    ServerInstallDir='/opt/IBMHTTPServer'
  else
    ServerInstallDir='/opt/IBMHttpServer'
  fi

 #DirectoryListing=$(batch_ssh ${host} "find ${ServerInstallDir} -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'")
 #DirectoryListing=$(batch_ssh ${host} "ls -1 $ServerInstallDir")
 DirectoryListing=$(batch_ssh ${host} "ls -1 $ServerInstallDir | while read d; do echo $d ; done")

  ServerVersion=$(batch_ssh ${host} "${ServerInstallDir}/bin/httpd -V | awk 'NR < 2'")

  echo '<br /><h3>'${host}'</h3>' >> $HTMLFILE
  echo '<b>Server Version</b>: ' ${ServerVersion} >> $HTMLFILE
  echo '<br /><b>Directory Structure</b><br /> ' $DirectoryListing >> $HTMLFILE

done

#- Email results
html_mail -t "some.body@company.co.uk" -r "noreply@servername" -s "Apache Security Audit" -a "$HTMLFILE"

(That sed command above come from a UNIX forums frequent, i forget the name! Thanks though - the two commented DirectoryListing vars are just experimentation)

So after this script has done it's thing, it invokes a perl script (html_mail) to send the report. (I didn't make this, and I know it works well). The mail comes through as planned, however the directory listing is very ugly, it looks like this:

_uninst admindocs bin cgi-bin conf example_module htdocs icons include keys.q.hpicheck.com keys.q.hpicheck.com.20061002_141729 keys.q.racexaminations.co.uk keys.q.racvehiclehealthcheck.co.uk keys.q.vehiclestatusreport.co.uk libexec license logs man readme ssl tivready version.signature 

I would like the above files/directory's to be listed like they would be after issuing `ls -1` from the shell.

Thank you for reading my post, I hope someone can help me. If you have any comments of the quality of the code above please air them, as it is my first (somewhat) useful script, and I'm eager for all the feedback I can get. (Full version of the script is Bash pastebin - collaborative debugging tool)

Thank you.

Try adding double quotes:
echo '<br /><b>Directory Structure</b><br /> ' "$DirectoryListing" >> $HTMLFILE

Thanks for the reply, Perderabo.

When I do as you suggest, no output returns for the directory structure listing.

I tried my other two experimental "DirectoryListing" variables with the variable "double quoted" in the echo statement, that gives output, but the same, ugly, output I was having before.

Thanks,
grebbux.

I think I'm getting somewhere, when I try this:

echo $DirectoryListing | sed 's/ /<br>/' >> $HTMLFILE

FYI: Nothing is listed if I put the above $DirectoryListing in "".

The listing looks like this:

_uninst
admindocs bin cgi-bin conf example_module htdocs icons include keys.q.hpicheck.com keys.q.hpicheck.com.20061002_141729 keys.q.racexaminations.co.uk keys.q.racvehiclehealthcheck.co.uk keys.q.vehiclestatusreport.co.uk libexec license logs man readme ssl tivready version.signature 

So I have one <br> after the first listing. I don't understand why the break isn't substituted for all the other spaces though!

Thanks again for reading.
grebbux.

I did it.

I went for the array approach.

declare -a DirectoryListing
$DirectoryListing=$(batch_ssh ${host} "ls -1 ${ServerInstallDir}")
for dir in ${DirectoryListing[@]}
do
echo $dir '<br>' >> $HTMLFILE
done

Thanks for the help anyway. :slight_smile:

***SOLVED***

grebbux.

That sed s command only replaces the first match. You need the g flag to do them all.

echo $DirectoryListing | sed 's/ /<br>/g' >> $HTMLFILE

But I'm glad you got it solved.

Ah thanks for answer there, I think the sed substitution is a better solution. :slight_smile: