1

First off, apologies if this has been asked before, I searched both here and StackOverflow, tried the man pages, and I'm still drawing a blank.

I'm trying to write a script that will auto-mount our server's archive drives on booting (for security reasons, nothing attached to the machine is automatically mounted by the system).

What I have so far is this:

#! /bin/bash
archives=( `ls /dev/disk/by-label/ | sed -rn 's/.*archive\\x20(.*)/\1/Ip'|sort -d`)

echo "Output of the Commands piped to array:"
for arcNum in ${archives[@]}; do
    echo "mounting Archive: $arcNum"
done

echo "Desired Output of Command:"
ls /dev/disk/by-label/ | sed -rn 's/.*archive\\x20(.*)/\1/Ip'|sort -d

Running it yields this in the terminal:

user@machine:~$ autoLoadArchives
Output of the Commands piped to array:
Desired Output of Command:
2
4
6
user@machine:~$

If I remove the the -n flag and p command from sed:

ls /dev/disk/by-label/ | sed -r 's/.*archive\\x20(.*)/\1/I'|sort -d

I end up with the raw unfiltered list in the array but a properly substituted and sorted unfiltered list in the command line version:

user@machine:~$ autoLoadArchives
output of the Commands piped to array:
mounting Archive: Archive\x206
mounting Archive: MY-USB
mounting Archive: PFI\x20ARCHIVE\x202
mounting Archive: PFI\x20Archive\x204
Desired Output of Command:
2
4
6
MY-USB
user@machine:~$ 

Output from $ ls /dev/disks/by-label/:

user@machine:~$ ls /dev/disk/by-label/
Archive\x206  MY-USB  PFI\x20ARCHIVE\x202  PFI\x20Archive\x204
user@machine:~$ 

I have the horrible feeling that my problem is probably something idiotically noobish, but I'm honestly drawing a blank as to what's going on here.

2
  • 1
    Can you include the output of ls /dev/disk/by-label/ so we can reproduce the behaviour?
    – choroba
    Sep 21, 2015 at 11:07
  • No Problem! Thanks for appearing so quickly!
    – Minothor
    Sep 21, 2015 at 11:16

1 Answer 1

2

Backquotes interpret some special characters (e.g. backslashes). Use $( ... ) instead.

archives=( $(ls /dev/disk/by-label/ \
             | sed -rn 's/.*archive\\x20(.*)/\1/Ip' \
             | sort -d) )
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .