On Wed, Feb 25, 2015 at 03:19:23AM -0600, Rob Landley wrote: > There's a marvelous book called "the unix philosophy" by mike gancarz > that talks about output intended for humans vs output intended to be > processed by other tools. > > A scriptable tool is one where you can do: > > echo $(( $(wc -l < blah) * 3)) > > If it's scriptable, the output of one tool is naturally the input to > another. Admittedly this can be annoying to use from the command line > such as the way "ls" with no arguments will produce no output when run > in an empty directory. But the _reason_ for that is so "for i in $(ls); > do blah $i; done" doesn't have to filter the ls output to use it in a > script.
Thread hijack/blkid feature I'd like to see (no need to do it now, I'm willing to try writing it at a later point). I was just fighting with non-scriptable output in another tool: blkid. By default it's ROUGHLY shell-quoted, with fields in variable positions (sample is not actual output, but how it looks): /dev/sda1: SEC_TYPE="msdos" LABEL="ECS_CDRUN" UUID="DEAD-BEEF" TYPE="vfat" PARTUUID="12345678-01" /dev/sda2: UUID="01234567-abcd-bcde-cdef-0123456789ab" SEC_TYPE="ext2" TYPE="ext3" PARTUUID="12345678-02" /dev/sda3: UUID="01234567-abcd-bcde-cdef-0123456789ab" TYPE="ext4" PARTUUID="12345678-03" /dev/sdb: LABEL="HA\"; `rm -rf /`" UUID="12345678-dcba-bcde-cdef-0123456789ab" TYPE="ext4" That's how it does the quoting: "" around each field, \ before " in the label. util-linux blkid has a whole bunch of rarely used options, but two of them seem to make it a whole lot easier to parse: -o <format> output format; can be one of: value, device, export or full; (default: full) (They don't mention -o udev here, but it works.) -s <tag> show specified tag(s) (default show all tags) <tag> is TYPE/SEC_TYPE/UUID/PARTUUID/LABEL, and means that only the fields specified get shown, in the same order as usual. Example: blkid -s TYPE -s LABEL -s UUID /dev/sda1 /dev/sda1: LABEL="ECS_CDRUN" UUID="DEAD-BEEF" TYPE="vfat" Of the listed output formats, -o device prints the block device/file and nothing else, -o export shell-quotes everything: /sbin/blkid -s LABEL -s UUID -o export /dev/sdb DEVNAME=/dev/sdb LABEL=HA\";\ \`rm\ -rf\ /\` UUID=282e77a6-cbd3-4692-8c62-715c45970377 -o value uses unquoted strings like this: blkid -o value -s UUID -s LABEL /dev/sdb HA"; `rm -rf /` 282e77a6-cbd3-4692-8c62-715c45970377 -o udev (which uses \x<ff> style quoting) is also available, but only mentioned in the manpage. Example: /sbin/blkid -o udev test.img ID_FS_LABEL=HA____rm_-rf_/_ ID_FS_LABEL_ENC=HA\x22\x3b\x20\x60rm\x20-rf\x20\x2f\x60 ID_FS_UUID=282e77a6-cbd3-4692-8c62-715c45970377 ID_FS_UUID_ENC=282e77a6-cbd3-4692-8c62-715c45970377 ID_FS_TYPE=ext2 I'm trying to parse this so I can get links in /dev/disk/by-label/ that match what udev produces; this is needed for mount by label to work. And the ID_FS_LABEL_ENC field of -o udev matches what I'm looking for exactly. Thanks, Isaac Dunham _______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net