I feel like I'm getting better at shell fu.
-
I feel like I'm getting better at shell fu. I'm not necessarily "optimal" at it, but I'm figuring stuff out.
last night's zsh one-liner, put together on my phone no less:
find -s /dev -name 'da*' -exec smartctl -a {} \; | grep Power_On_Hours | cut -w -f 11 | xargs -n 1 -I {} sh -c 'echo $(( ({}-({}%(24*365))) / (24*365) ))y $(( ( {} - ({}-({}%(24*365))) ) / 24 ))d' \;
it shows me how many power-on hours my disks have based on SMART data, converted into years and days.
@gsuberland one-liners like that are pretty excellent. I tend use awk for stuff like that sh command at the end, I think it doesn't require quite so many parens and you also probably don't need the cut because you can just use $11 in awk. Plus you can do summary statistics and print out in END{ }.
-
@gsuberland one-liners like that are pretty excellent. I tend use awk for stuff like that sh command at the end, I think it doesn't require quite so many parens and you also probably don't need the cut because you can just use $11 in awk. Plus you can do summary statistics and print out in END{ }.
@acsawdey I've tried to use awk a few times but I find the syntax non-obvious (in a similar way to perl) so it never sticks
honestly `python -c` would probably be easier for me to remember lol
-
shells / coreutils could really use a built in way to parse and convert timespans, though. there's some limited ability within gnu versions of it, but it's kinda awkward and I can't use them anyway 'cos I'm on BSD.
the main annoyance I have with shell stuff is how the command names defy discoverability.
"I would like to flush my current shell history to the history file"
"ok run fc -W"
"huh. what does fc stand for?"
"fix command"
"... ok"
-
the main annoyance I have with shell stuff is how the command names defy discoverability.
"I would like to flush my current shell history to the history file"
"ok run fc -W"
"huh. what does fc stand for?"
"fix command"
"... ok"
-
the main annoyance I have with shell stuff is how the command names defy discoverability.
"I would like to flush my current shell history to the history file"
"ok run fc -W"
"huh. what does fc stand for?"
"fix command"
"... ok"
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
-
I feel like I'm getting better at shell fu. I'm not necessarily "optimal" at it, but I'm figuring stuff out.
last night's zsh one-liner, put together on my phone no less:
find -s /dev -name 'da*' -exec smartctl -a {} \; | grep Power_On_Hours | cut -w -f 11 | xargs -n 1 -I {} sh -c 'echo $(( ({}-({}%(24*365))) / (24*365) ))y $(( ( {} - ({}-({}%(24*365))) ) / 24 ))d' \;
it shows me how many power-on hours my disks have based on SMART data, converted into years and days.
@gsuberland smartctl has a json output option, which would mean jq could give something maybe more readable, but the format it emits is kinda annoying... it's like tables as json
-
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
@gsuberland in zsh, it's all one page, zshbuiltins(1)
-
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
@gsuberland not on their own; bash builtins share one giant manpage you never want when you get it, and never when you want it. man test.
zsh has `man zshbuiltins`. -
@gsuberland smartctl has a json output option, which would mean jq could give something maybe more readable, but the format it emits is kinda annoying... it's like tables as json
@classabbyamp yeah you could do
smartctl -a -j /dev/da0 | jq '.ata_smart_attributes.table[] | select(.name=="Power_On_Hours") | .raw.value'
but the grep and cut was shorter here
-
@gsuberland in zsh, it's all one page, zshbuiltins(1)
@classabbyamp what a mess
-
@gsuberland not on their own; bash builtins share one giant manpage you never want when you get it, and never when you want it. man test.
zsh has `man zshbuiltins`.@funkylab which then makes it impossible to search >_<
-
@funkylab which then makes it impossible to search >_<
@gsuberland yep, exaxtly my gripe. `man zsh-for` or even `man zsh for` would be possible on modern `man`s
-
@acsawdey I've tried to use awk a few times but I find the syntax non-obvious (in a similar way to perl) so it never sticks
honestly `python -c` would probably be easier for me to remember lol
@acsawdey @gsuberland
Awk is a bit awkward, but it's a piece of cake compared to Perl. But I, too, prefer Python. -
@acsawdey @gsuberland
Awk is a bit awkward, but it's a piece of cake compared to Perl. But I, too, prefer Python.@brouhaha @gsuberland well, yes for anything other than 1-liners I too prefer python. But awk somehow is very amenable to doing tiny things like this:
awk '{count[$0]++} END{for(x in count) { printf("%-10d %s\n",count[x],x) } } ' | sort -n
-
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
@gsuberland consider toybox?
-
the main annoyance I have with shell stuff is how the command names defy discoverability.
"I would like to flush my current shell history to the history file"
"ok run fc -W"
"huh. what does fc stand for?"
"fix command"
"... ok"
I use fc (through aliases) all the time and I have never heard a good explanation of the name.
100% agreed discoverability is a huge problem in shell commands, built-in or not. I wrote a tool, "nums",then literally years later found out that "seq" does almost the same thing. Mine is only better in being smart about zero padding: "nums 01-10" pads, "nums 1-10" doesn't
-
R relay@relay.an.exchange shared this topic
-
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
@gsuberland this annoys me so much. Even more when I get the builtin man page for something that is also a standalone tool. Which has a man page -
@gsuberland consider toybox?
@F3715H I read the readme and it isn't clear to me what toybox is. it also exclusively mentions Linux, which I don't use.
-
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
@gsuberland in fish, this just works. Probably required a blood sacrifice of them though.
-
I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.
note: I am not asking for advice, I am simply stating a problem with the default state of things.
