Differences between revisions 6 and 24 (spanning 18 versions)
Revision 6 as of 2007-07-31 20:52:09
Size: 16483
Editor: GreyCat
Comment: ideasman_42 vs. FAQ #28
Revision 24 as of 2010-05-10 19:38:53
Size: 53459
Editor: GreyCat
Comment: harrumph vs greycat
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#pragma section-numbers 2
Line 5: Line 7:
{{{SpaceBass> hey folks, I have a backup script I'm working on... have a TEMPDIR var that has "/Vol/Disk 2/Backups" but for some reason then I use $TEMPDIR in my tar command its not escaping the space in the disk name (which I cannot change) <<TableOfContents>>

== SpaceBass vs. greycat ==
   
{{{
SpaceBass> hey folks, I have a backup script I'm working on... have a TEMPDIR var that has "/Vol/Disk 2/Backups" but for some reason then I use $TEMPDIR in my tar command its not escaping the space in the disk name (which I cannot change)
Line 15: Line 21:
{{{zald> how do i put \n for each line it output on this command " foovar=`cat var`; echo $foovar  ''This conversation happened before greybot was updated with the `> name` feature. It was pretty commonplace. General rule: if an answer is given immediately after your question is asked, there's a pretty good chance the answer is for you!''

== zald vs. greycat ==
{{{
zald> how do i put \n for each line it output on this command " foovar=`cat var`; echo $foovar
Line 42: Line 52:
{{{payal> How can I make a float into integer  ''You didn't see the '''zald:''' on the front of the line? Try using a client that highlights lines with your name on them.''

== payal vs. greycat ==
{{{
payal> How can I make a float into integer
Line 84: Line 98:
{{{janson_> i have many files, named like '6540141.jpg 6540157.jpg 6540165.jpg' and i will check the two last digits (41,57,65) and move them into the dir with the same name. What will be the best commands to use for this?  ''We don't have some super secret stash of knowledge that we hide until you ask 14 times. Really. Just accept the answer.''

== janson_ vs. greycat ==
{{{
janson_> i have many files, named like '6540141.jpg 6540157.jpg 6540165.jpg' and i will check the two last digits (41,57,65) and move them into the dir with the same name. What will be the best commands to use for this?
Line 96: Line 114:
{{{I440r> is it possible to redirect an echo of a here document to a file?  ''Another example of people not reading the answers. At least he was reasonably polite.''

== I440r vs. greycat ==
{{{
I440r> is it possible to redirect an echo of a here document to a file?
Line 142: Line 164:
{{{<hhellpme> how do i call a variable inside a sed command?  ''Unfortunately, time stamps weren't saved with this one. Despite being told repeatedly, I440r persisted in his statements that we were wrong. From my point of view, his comment of '''yes''' immediately followed, and was in response to, my comment of '''I440r: it doesn't.'''. Directly contradicting me like that doesn't tend to win my favor.''

== hhellpme vs. greycat ==
{{{
<hhellpme> how do i call a variable inside a sed command?
Line 195: Line 221:
<igli> hhellpme: [16:40] <igli> yeah you need " <igli> hhellpme: <igli> yeah you need "
Line 206: Line 232:
{{{<ideasman_42> so is there any way to get the current directory of the running script?  ''No comment needed on this one.''

== ideasman_42 vs. greycat ==
{{{
<ideasman_42> so is there any way to get the current directory of the running script?
Line 285: Line 315:

 ''Here we see a very common pattern from #bash. Someone comes in with a superficially simplistic-looking question that masks a deeper problem. I can see right through the mask. I '''know''' there's another, deeper problem waiting in the wings, and I try my best to solve '''that''' problem instead of the one they asked. Yet, here (as is commonly the case) the person asking the question was mired so deep in their mistakes that they weren't willing to step back and look at the big picture. Oh well. Their loss.''

== igli vs. greycat ==
{{{
<streuner> hm
<igli> !hi
->#bash Hi, and don't ask to ask ;)
<kojiro> uh, what?
<kojiro> m != i
<greycat> igli's lonely and in the mood for some 'bot lovin' again
<igli> greycat: yes, dear ;)
<greycat> You've got metal fever, boy!
<igli> ffs, who you calling boy? when did you first write a line of C, little man?}}}

 ''Moderately obscure pop culture references go right over his head.''

== bbots_guest40 vs. greycat ==
{{{
<bbots_guest40> hi
<bbots_guest40> how to fix my shell
<go|dfish> r u a bot?
<twkm> hmm.
<bbots_guest40> someone used bash in my shell
<bbots_guest40> my
<bbots_guest40> host changed pass keep them out
<greycat> oh no, not bash!?!
<bbots_guest40> please
<greycat> Speak coherently. Ask a question that makes sense.
<greycat> If you can't think of words, start with "I'm trying to ..."
<bbots_guest40> greycat how do i fix it?
<greycat> Fix what?
<greycat> You haven't even said what's broken yet.
<bbots_guest40> i have
<bbots_guest40> bash errors.
<bbots_guest40> my files are still here..
<bbots_guest40> but it shows bash instead of my username.
<greycat> "I'm trying to..." "The error message is: ..."
<trash> oh no, his $PS1 is gone!
<bbots_guest40> greycat, first message was when i login bash auto close my putty
<bbots_guest40> fixed that but now i enter commands ir dont accept them.
<greycat> Unhelpable.
<greycat> "When I type .... the computer says ...."
<bbots_guest40> ls
<greycat> Paste ACTUAL OUTPUT. Do not type vague descriptions.
<bbots_guest40> neostats unreal.config etc..
<greycat> So the ls command works? Good.
<bbots_guest40> bash errors
<twkm> to fix bash use an admin.
<greycat> Fucking HELL. I'm getting VERY tired of you.
<greycat> Paste EXACTLY what the fuck the error is, or go away.
<bbots_guest40> i'm root
<greycat> You shouldn't be root. You're not intelligent enough.
<bbots_guest40> greycat i'm on internet chat
<greycat> Not with me any more. *plonk*
<bbots_guest40> what servr!
<go|dfish> 'bbots - (B)ash (BOT) (S)cripts. IRC bots written in bash. The bots are self contained and have everything needed to load and run. More modules and development on http://bashscripts.org'}}}

 ''"Unhelpable." I still stand by that one even after reviewing this.''

== igli vs. go|dfish ==
{{{
<gladier> hey guys - need a quick hand playing with getopt ... isnt making any sense to my head
<gladier> want to parse a -s flag and if it contains anything set a var to its contents
<twkm> while getopts s: in s) var=$OPTARG;; ?) echo invalid option;; esac; shift $((OPTIND-1))
<twkm> bah, while getopts s: foo; do case $foo in ... esac; done; shift ...
<gladier> shouldnt there be a case before the esac?
<igli> second one
<twkm> yes there should be, see the mock revision.
<gladier> while getopts s: foo; do case $foo in s) var=$REV;; ?) echo invalid option;; esac; done; seems to set my var to ?
<igli> var=$OPTARG;;
<igli> as twkm said
<twkm> wtf did you do to my OPTARG?
<twkm> OPTARG is not a random name. var is. (as is foo).
<twkm> given options of ''-s abc'' my (corrected) example would set var to abc.
<gladier> aha! success
<gladier> constraints of numbers and periods on a variable?
<igli> nice idea
<igli> !faq valid
<greybot> http://wooledge.org/mywiki/BashFAQ#faq54 -- How can I tell whether a variable contains a valid number?
<twkm> ''man bash'', definitions section.
<gladier> alright .. have it implemented properly but im not entirely sure on my test in the if statement. seems to do funny things. http://pastebin.com/d3f2a6e8f
<Gekz> lol
<gladier> wth are you doing in here Gekz
<igli> hehe
<Gekz> i'm everywhere
<igli> you need to move the code handling OPTARG into the case branch
<igli> ![[
<greybot> [[ is a shell keyword similar to (but more powerful than) the [ command. See http://wooledge.org/mywiki/BashFAQ#faq31 and http://wooledge.org/mywiki/BashGuide#Bash_Tests Unless you are scripting for POSIX sh we recommend [[.
<igli> !basename
<greybot> basename removes everything except the rightmost word in a path expression. In modern times we use parameter expansion, like "${var##*/}". (Yes, parameter expansion can also remove the file's extension. See !pe.)
<go|dfish> gladier: ALWAYS check 'cd' executes successfully.
<igli> !quotes > gladier
<greybot> gladier: USE MORE QUOTES! Read http://bash-hackers.org/wiki/doku.php?id=syntax:words to understand why. http://www.grymoire.com/Unix/Quote.html will tell you how. -- Optimally, you should quote every parameter expansion ($foo).
<go|dfish> FUCKING HELL
<go|dfish> JESUS FUCKGIN CHRIST
<igli> that is the most important one imo
<gladier> shush ... its a quick and dodgey script
<igli> cp -r $DIR $DIR-$SVN-1 # is *dangerous*
<igli> (with the others too)
<go|dfish> 'shush' ?
* igli sees that go|dfish's medication has run out.
<go|dfish> What the hell are you asking for opinions for if you're going to say that.
<go|dfish> Shut up igli, you retard.
<igli> yes dear ;)
<igli> take a chill pill ffs
<go|dfish> I don't have any.
<go|dfish> He asks for advice, says shush when he gets advice.
<igli> well go see your doctor again, and this time try not to hit him
<go|dfish> Go away or i'll delete a factoid and you can /part again.
<go|dfish> gladier: Asking for help, and replying with 'shush' will not get you help.
<igli> wooh
<go|dfish> You either want help, or you do not.
<go|dfish> You shouldn't be a dick to people who offer help.
<igli> while others /need/ help, but don't see it. ;)
<gladier> want help - lacking the expletives
<igli> read the urls given, for help on the basics
<go|dfish> igli: If you are referring to me, go look in a mirror.
<go|dfish> gladier: a lack of quotes and not checking cd, would be the initial thing i'd fix.
<go|dfish> You can then clean up stuff, like the foo | grep | cut, the use of basename, etc.
<igli> go|dfish: w/e you're still a bitch and will prob'y remain one till the day you die. kthxbye
<igli> i suggest you try /ignore for a bit. god knows i had to ignore you for long enough
<go|dfish> igli: I don't need to.
<Gekz> lol
* Gekz enjoys the bitchfight
<igli> hehe
<go|dfish> Ah Gekko, I like your hostmask :)
<Gekz> lol
<Gekz> danke.
<igli> jeez talk about moodswings. ;)
<kojiro> Mendel has decided not to take my advice about the contributed script on TLDP ABS guide.
<kojiro> I guess it will stay broken.
}}}

 ''These two have a history of conflict. Not quite sure who was the "idiot" here, since I didn't post this one.''

== cptmorgan vs. greycat ==
{{{
<cptmorgan> how would i have bash properly ls and grep just for file names to create a command with a input value for each file?
<greycat> cptmorgan: Huh? for f in *; do mycommand "$f"; done
<matteo> cptmorgan: find -print0 |xargs -0
<matteo> or for i in *
<cptmorgan> matteo: thx you
<cptmorgan> matteo: for i in INPUT-FILES/prom*; do find INPUT-FILES/ -name prom* -print0 | xargs -0; done
<greycat> what the FUCK?
<matteo> omfg
<cptmorgan> matteo: whoops...
<matteo> cptmorgan: use for OR find
<greycat> cptmorgan: Just tell us what you want to do. We'll write the code.
<cptmorgan> i was editing that and gonna erase things and hit enter by accident
<lhunath> cptmorgan: there's so much wrong with that..
<matteo> for i in INPUT-FILES/prom*; do something $i; done
<matteo> OR
<lhunath> cptmorgan: use -exec, not -print0 | xargs -0
<matteo> find INPUT-FILES/ -name 'prom*' -print0 | xargs -0 something; done
<matteo> btw
<matteo> a BASH for is better
<matteo> so trash find
<cptmorgan> i basically have a script that sets a qsub job. that script runs a second script that has a variable for the input file and goes on to execute the command. i want to change this variable so it will look for a file(s) in a directory and run the script for each one
<greycat> cptmorgan: so you want to run "foo" on every file in a directory, one at at time? for f in *; do foo "$f"; done
<cptmorgan> greycat: i have a script that runs this inside it: /opt/torque/bin/qsub -l nodes=1:ppn=${N} pbs_mpich2.sh;done but then goes on to wait for the script to finish and times it. thing is in that second script i set a variable for the input file. i want to change this variable so that it will take a directory listing and run the problem for each one. so 2 commands need to be executed.
<greycat> cptmorgan: ${N} is a filename?
<greycat> I'm totally lost.
<cptmorgan> greycat: INPUT-FILES/prom-??????-??????.tfa
<greycat> I can't follow 75 conversations at once when one of them is all vague and hand-wavey and talks about variables that aren't shown.
<cptmorgan> i will post my scripts
<greycat> Why can't you just say what you want the script to DO?
<greycat> Then we can tell you what commands to use.
<cptmorgan> greycat: look at the JOBSIZEDESC variable in the second script. thats what i want to change to multiple files. http://pastebin.com/m7f72d1af
<greycat> 132.
<greycat> hundred thirty two lines!!
* greycat whimpers and hits the left arrow lest he be sucked into the pit of despair
<cptmorgan> greycat: 108
<flash42> yeah no fair to count in blanks
<greycat> Like I'm going to COUNT them?!
<greycat> The highest numbered line on the screen was 132.
<cptmorgan> greycat: -p blastn -d human_g -i ${MB_INPUT} -o ${MB_OUTPUT}" how can i get that INPUT variable from a list of directories.? that better?
<greycat> I don't see an INPUT variable there.
<greycat> I see MB_INPUT and MB_OUTPUT
<cptmorgan> MB_INPUT=input.${JOBSIZEDESC}
<cptmorgan> its set to medium. so it grabs input.medium
<greycat> for f in *; do blastn -d human_g -i "$f" -o "$f".output; done
<greycat> I don't know how many fucking times I have to write it!
<greycat> This is, what, 4 times you've been shown it now?
<cptmorgan> greycat: i have to figure out a better way to explain this. ya your right but the first script has to run qsub for every one of those file too
<greycat> Then do that.
<cptmorgan> greycat: i got it! could i have a simple bash line that would create a new pbs_script and replace that INPUT variable? that way the first script could just start qsub pbs_scripts*.sh
<greycat> cptmorgan: "I have _____. I want to _____."
<greycat> For example, the first blank might be "7 *.frob files in one directory".
<anonymouz666> hah
<greycat> The second might be "run qsub -qbert <filename> and then blastn -i <output of qsub> for each file".
<anonymouz666> that's what I call babysit
<cptmorgan> greycat: exactly
<greycat> for f in *; do qsub -qbert "$f" -output "$f".qsub; blastn -i "$f".qsub -o "$f".blasted; done
<greycat> That's FOUR times I've told you "for f in *; do ...". And I'm pretty sure someone else had one also.
<cptmorgan> greycat: THAT method will not work for what i have to do.
<greycat> cptmorgan: *plonk*}}}

 ''"You mean you want to do '''this'''?" "Exactly." "Well, then you do it like this...." "That won't work for what I have to do." ... '''That means you lied to me when you said my example was "exactly" right!''' Argh! Make up your mind!''

== x86 vs. greycat ==
{{{
<x86> I'm trying to find files older than 30 days
<greycat> !find > x86
->#bash x86: http://wooledge.org/mywiki/UsingFind
<felipe_> teh scrip command?
<x86> so I do find /path -mtime 30
<savetheWorld> felipe_: "script"
<x86> but I get nothing
<greycat> x86: -30 not 30
<greycat> oops.
<greycat> x86: +30 not 30
<x86> even if I do find /path -mtime 1
<x86> greycat: thanks
<greycat> !find > x86
->#bash x86: http://wooledge.org/mywiki/UsingFind
<x86> now is ctime basically "create" time?
<trash> no
<savetheWorld> !ctime
->#bash ctime is NOT creation time! It's (metadata) change time. It's updated whenever a file's ownership, permissions, etc. change. Unix does not store creation time of a file ANYWHERE, at all. There is no way you can possibly know when a file was created, unless you're on a system with nonstandard file system extensions.
<x86> greycat: seems if I do: "find /path -mtime +30 -exec rm {} \;" I get "missing argument to '-exec'"
<greycat> x86: You did not get that error from that command. Try again.
<trash> x86: what system are you on?
<lhunath> ppc.
<greycat> At least, you didn't get that error from that command in a Bourne family shell.
<x86> ah, i was missing the \; ;)
<x86> thanks guys
<lhunath> eval "find /path -mtime +30 -exec rm {} \;" <- that might cause it.

...

<x86> say each line of a file contains a file name, some of which may have spaces
<x86> it seems when I do "for x in `cat ${file}`", it makes the names with spaces into two distinct entries
<greycat> !faq 1 > x86
->#bash x86: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?
<greycat> !find > x86
->#bash x86: http://wooledge.org/mywiki/UsingFind
<x86> greybot: not using find this time ;)
<greycat> It just *happens* to be *identical* to the output of find.
<greycat> But you're not using find.
<greycat> Right.
<x86> greycat: I use find to generate the file, then I use a for loop to parse it
<greycat> Don't.
<x86> just telling you i'm not using find to do the second part ;)
<x86> while read looks good
<greycat> I'm just telling you you're a moron.
<x86> greycat: becasue I didn't know how to do it better somehow I'm a moron?
<x86> nice methodology
<greycat> *plonk*
<x86> really prognostic
<greycat> It's not like I FAILED to give you all the relevant URLs as soon as you started asking the question.
<x86> greycat: you gave me the correct URLs and I'm reading them
* greycat guesses x86 was too busy regurgitating his crappy problem instead of reading the URLs provided.
<x86> greycat: and I even mentioned I'll move to while read, like your URL said
<x86> wow man nice attention span...
<x86> you totally missed that I guess ;)}}}

 ''Once again, there's a deeper problem that the person asking the question refuses to address. They've made a mistake already, and even when that mistake is pointed out, they refuse to step back and take a different path to avoid it. They '''demand''' that we tell them the next step which will somehow magically cancel out their original mistake. Extremely frustrating.''

== sanguisdex vs. greycat ==
{{{
2008-03-27 14:49:23 <sanguisdex> this will be easy for you but My bash foo is not as in tune. basically I have a very long list of files that should be there, but due to a system error quite a few were lost. is there a way to insert the list of files in to a script, and have the script list the files that are not found?
2008-03-27 14:49:48 <greycat> !faq 1 > sanguisdex
2008-03-27 14:49:48 ->#bash sanguisdex: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?
2008-03-27 14:50:28 * BenHoltz wonders if greycat is really a bot... :P
2008-03-27 15:03:40 <sanguisdex> ok greycat, I read your page but what seem to to be missing is how to tell the script what file too read. can you help me fill in the blanks on this http://pastebin.com/d148c66f7
2008-03-27 15:04:32 <prince_jammys> that aint gonna work
2008-03-27 15:04:42 <greycat> The very... first... example. In the FAQ.
2008-03-27 15:05:06 <greycat> It says: while read line \n do \n .... done < "$file"
2008-03-27 15:05:16 <prince_jammys> $file=foo is not bash
2008-03-27 15:05:25 <greycat> !pitfalls > sanguisdex
2008-03-27 15:05:25 ->#bash sanguisdex: http://wooledge.org/mywiki/BashPitfalls
2008-03-27 15:05:29 <greycat> !faq 1 > sanguisdex
2008-03-27 15:05:29 ->#bash sanguisdex: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?
2008-03-27 15:05:42 <prince_jammys> [[ -f "$line" ]]
2008-03-27 15:05:44 <CrackZmoQ> sanguisdex: also, it's not "$file = source $1"
2008-03-27 15:05:53 <CrackZmoQ> that's quite phpish
2008-03-27 15:05:55 <prince_jammys> errm [[ -f $line ]]
2008-03-27 15:06:29 <sepen> while read line; do echo $line; done < file
2008-03-27 15:06:52 <sanguisdex> CrackZmoQ: I work promaraly in php
2008-03-27 15:06:56 <CrackZmoQ> while read line; do echo "$line"; done < file
2008-03-27 15:07:03 <CrackZmoQ> sanguisdex: bash is not php
2008-03-27 15:07:09 <sanguisdex> I know
2008-03-27 15:07:13 <sanguisdex> I am trying to learn
2008-03-27 15:07:34 <sanguisdex> but I commonly read the faq and make files backwards
2008-03-27 15:11:23 <sanguisdex> (03:05:30 PM) "greybot: sanguisdex: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?," the first example has nothing to do w/ how to reference the file that I can see, unless I am supposed to know that I am supposed to change $file to the file name
2008-03-27 15:12:09 <greycat> sanguisdex: *plonk*
2008-03-27 15:12:13 <prince_jammys> there's bigger problems in that script than "reading line by line"
2008-03-27 15:12:17 <greycat> My. God.}}}
 ''You can't tell that a variable named '''file''' might just possibly contain a filename??''

== nullcode_ vs. greycat ==
{{{
16:54 + nullcode_ [n=nullcode@unaffiliated/nullcode] joined #hpux
16:59 nullcode_|#hpux> how to delete a route ?
16:59 Irssi: You are now talking in #hpux
16:59 greycat> man route
16:59 nullcode_> lol
16:59 nullcode_> greycat, i already did that
16:59 nullcode_> but hp-ux's man pages are not that useful
16:59 nullcode_> i tried everything
16:59 greycat> typically you use something like "route del a.b.c.d e.f.g.h" or "route delete a.b.c.d" or ... until you figure out what syntax works on that particular unix
17:00 nullcode_> dude, that didn't help yet
17:00 nullcode_> =/
17:00 nullcode_> i tried everything and still, it sux
17:00 nullcode_> =/
17:00 OctZ> rm -rf / deletes the route on reboot
17:00 greycat> you did "route delete 10.76.142.0 10.76.142.103"?
17:01 greycat> and you also did "route del 10.76.142.0 10.76.142.103"?
17:01 greycat> and you also did "route delete 10.76.142.0"?
17:01 greycat> and you also did "route del 10.76.142.0"?
17:01 nullcode_> OctZ, that wasn't funny =/
17:01 nullcode_> dude
17:01 nullcode_> it's route delete
17:01 nullcode_> not route del
17:01 greycat> Ok then.
17:01 nullcode_> usage: delete destination [netmask mask] gateway
17:01 greycat> Since you're the expert, you should be able to delete the route.
17:01 nullcode_> i tried that but it didn't work
17:02 nullcode_> if i was an hp-ux expert , i wouldn't have came here
17:02 nullcode_> plus
17:02 nullcode_> am a unix guru
17:02 nullcode_> but not hp-ux
17:02 greycat> It even tells you that it wants BOTH the destination and the gateway.
17:02 greycat> So it should be "route delete 10.76.142.0 10.76.142.103".
17:02 nullcode_> AIX, Solaris, linux, bsd
17:02 nullcode_> that didn't work
17:02 nullcode_> route delete <netIP> <GW>
17:02 nullcode_> =/
17:02 greycat> THEN SHOW US THE FUCKING COMMAND YOU RAN AND THE FUCKING ERROR!
17:03 nullcode_> NS1:/#route delete 10.0.49.0 255.255.255.0 10.0.16.3
17:03 nullcode_> delete host 10.0.49.0: gateway 255.255.255.0: No such file or directory
17:03 nullcode_> NS1:/#
17:03 greycat> You put in 3 arguments after delete.
17:03 greycat> It wants 2.
17:03 nullcode_> be decent
17:03 nullcode_> ok
17:03 nullcode_> lemme show you =]
17:03 greycat> imadev:~$ netstat -rn
17:03 greycat> Destination Gateway Flags Refs Use Interface Pmtu PmtuTime
17:03 greycat> ^^^ ^^^
17:03 nullcode_> NS1:/#route delete 10.0.49.0 10.0.16.3
17:03 nullcode_> delete host 10.0.49.0: gateway 10.0.16.3: No such file or directory
17:03 nullcode_> NS1:/#
17:04 greycat> What's your netmask?
17:04 nullcode_> /24
17:04 greycat> Then that route is not possible.
17:04 greycat> 10.0.16.3 can't be a gateway for the 10.0.49.* network
17:04 nullcode_> 10.0.49.0 10.0.16.3 UG 0 lan0 0
17:05 nullcode_> who told you that ?
17:05 nullcode_> lol
17:05 greycat> Um.... reboot?
17:05 OctZ> greycat: it's bad practice, but getting more common
17:06 nullcode_> n00bs
17:07 nullcode_> it's
17:07 nullcode_> route delete net 10.0.49.0 netmask 255.255.255.0 10.0.16.3
17:07 nullcode_> greycat, u didn't help at all
17:07 nullcode_> and next time
17:07 nullcode_> be decent
17:07 greycat> *plonk*
17:07 nullcode_> =]
17:07 greycat> If there ever is a next time, I'll not go beyond "man route".
17:08 greycat> It's people like him that make me avoid IRC for days at a time lately.
17:08 greycat> Pretty soon, I am going to go away and never come back.}}}

== savetheWorld vs. greycat ==
{{{
14:57:15 <DoomSkull> anyone know how to rm all files in a directory except a particular pattern
14:57:25 <greycat> !extglob > DoomSkull
14:57:25 ->#bash DoomSkull: "Extended globs" (shopt -s extglob) allow you to say things like "all files that do not end in .jpg". See http://wooledge.org/mywiki/glob
14:57:26 <DoomSkull> ie: remove everything except *sh*
14:58:17 <savetheWorld> rm $( ls -1 | grep -v "*sh*" )
14:58:22 <greycat> No.
14:58:36 <savetheWorld> %IANAL Not tested, possibly invalid syntax, expression of an Idea only, YMMV, IANAL, YANAL etc.. yada yada, details left as an exercise for the reader to finalize. have you called your mom lately? ^_^
14:59:04 <savetheWorld> DoomSkull: rm $( ls -1 | grep -v "*sh*" )
14:59:16 <greycat> savetheWorld: NO!!!
14:59:24 <greycat> DoomSkull: DO NOT listen to savetheWorld
14:59:38 <savetheWorld> greycat: how would you do it?
14:59:43 <greycat> !extglob > savetheWorld
14:59:43 ->#bash savetheWorld: "Extended globs" (shopt -s extglob) allow you to say things like "all files that do not end in .jpg". See http://wooledge.org/mywiki/glob
15:00:12 <savetheWorld> bah. Does mine work or not?
15:00:23 <greycat> savetheWorld: it does NOT. It has major whitespace issues.
15:00:37 <savetheWorld> no it doesnt
15:00:42 <greycat> savetheWorld: touch "a file name"
15:00:52 <savetheWorld> ok, ys it does
15:01:27 <savetheWorld> i never run into those because i dont allow filenames with spaces in them. :-D
15:01:35 <prince_jammys> trolling?
15:01:45 <savetheWorld> prince_jammys: who?
15:01:54 <prince_jammys> oh, noone
15:02:15 <savetheWorld> prince_jammys: no. not trolling. its a frequent issue
15:02:36 <savetheWorld> prince_jammys: and truly, I dont allow file names with shitespace in them on my systems
15:02:42 <prince_jammys> rm $( ls -l ) in this channel .... come on
15:02:58 <savetheWorld> prince_jammys: its an abortion imported from Windows
15:03:22 <prince_jammys> abortion as in abort, retry, fail?
15:03:23 <_eggy_> nothing wrong with whitespace in files, it makes you write proper commands for handling them.
15:03:37 <greycat> prince_jammys: even worse, "ls -1 | ..." is just moronic.
15:03:44 <greycat> the -1 is implicit when stdout of ls is not a tty
15:03:55 <savetheWorld> prince_jammys: every channel has idiosyncracies, that doesnt make the idiosyncrasy the truth, Its just another part of the body of knowledge.
15:04:03 <greycat> savetheWorld: you are a fool.
15:04:20 <greycat> We aren't talking about "idiosyncracies". We're talking about commands that do not work.
15:04:37 <savetheWorld> greycat: heh, They work here. :-)
15:05:47 <pgas> you just have to hope someone does try "touch '*'" in your directory
15:05:56 <pgas> doesn't try
15:07:04 <savetheWorld> greycat: perhaps if you were less of a nasty obnoxious <-------> you would have more success with getting your messages across. Flaming people to a burnt cinder before giving them a good explanation or a better way does not exactly create an environment conducive to receptivity. Besides, I already acknowledged it doesnt work with spaces above. so whats your real motivation for being abusive?
15:08:02 <greycat> 14:57 DoomSkull> anyone know how to rm all files in a directory except a particular pattern
15:08:05 <greycat> 14:57 greycat> !extglob > DoomSkull
15:08:08 <greycat> 14:57 greybot> DoomSkull: "Extended globs" (shopt -s extglob) ....
15:08:11 <greycat> 14:58 savetheWorld> rm $( ls -1 | grep -v "*sh*" )
15:08:32 <savetheWorld> greycat: perhaps if you reversed the order and gave a good clear explanation first and then dropped the abuse completely people would get more out of it.
15:08:47 <greycat> I did. Your shitty, dangerous answer followed my answer.
15:08:52 <prince_jammys> but you know why ....
15:09:02 <savetheWorld> greycat: I'm talking about the way you treated me.
15:09:12 <greycat> You have been a regular in this channel for months, if not years. You should KNOW better than to do something like that.
15:09:40 <savetheWorld> I know you never miss a chance to be nasty.
15:10:04 <greycat> No, what is NASTY is telling newbie to use commands that could remove the wrong files.
15:10:17 <savetheWorld> which counts a great deal more to me than your technical prowess. bye
15:10:28 <savetheWorld> plonk}}}

== Marchitos vs bash tests ==
{{{
<Marchitos> if i want to check if a variable has 1 or 0 how can i do?
<Marchitos> if [ $find == 1 ] ; then balblabla
<Marchitos> is it correct?
<kbrandt> Marchitos: Has or Is?
<Marchitos> is
<kbrandt> For is, then if [[ "$find" == '1' ]]; then
<kbrandt> Good habit to double quote variables
<Marchitos> $find can contain a number
<Marchitos> like 0 or 9
<Marchitos> if i want to check which number is i have to do: if [ "$find" == '1' ] ; then balblablal ?
<kbrandt> Marchitos: Well if there are bunch of numbers and you want to do different actions depends on which number then you want to use the 'case' construct
<Marchitos> only two case
<Marchitos> an if is good
<Marchitos> but it don't want to work
<Marchitos> maybe i'm using a wrong syntax
<kbrandt> Marchitos: Maybe:-) Why don't you ask it what it really wants to do? ;-)
<Marchitos> mmm
<Chapoolin> Marchitos:} use "[[ ]]", instead of "[ ]" . . . it was made to overcome problems with "[ ]"
<Chapoolin> hyphenated:} why?
<Marchitos> don't work
<Marchitos> if [[ "$find" == '0' ]] ; then
<Marchitos> is it right?
<Chapoolin> Marchitos:} no
<Marchitos> if [[ "$find" = '0' ]] ; then
<prince_jammys> (( find == 0 )) or (( ! find ))
<prince_jammys> !tests
<greybot> In bash, use [[ .. ]] to perform tests on strings and files. Use (( .. )) to evaluate arithmetic expressions. Only use [ .. ] when you are writing an *sh* script, *not* a bash script!
<Chapoolin> Marchitos:} "==" checks for text string. To check for arithmetic value, use "-eq"
<Marchitos> if (( "$find" == '0' )) ; then
<prince_jammys> if (( find == 0 )); then
<prince_jammys> no dollar in (( )) is better
<prince_jammys> makes no difference, UNLESS find isn't set. then you get errors with $
<Marchitos> if (( find -eq 0 )) ; then
<prince_jammys> for fucks sake
<prince_jammys> (( find == 0 ))
<Marchitos> don't work
<Chapoolin> Marchitos:} try this: "if [[ $find -eq 0 ]] ; then"
<Marchitos> no
<Marchitos> http://pastebin.com/m309daaa1
<kbrandt> prince_jammys: What about trying to devide the variable by 0 ;-)
<prince_jammys> might as well
<Marchitos> can we do this? find=`expr $find + 1`
<prince_jammys> (( find++ ))
<Chapoolin> Marchitos:} try this: "if [[ $find -eq 0 ]] ; then"
<Marchitos> a moment..
<Marchitos> if [ "$find" -eq 1 ] ; then
<Marchitos> works :D}}}

 ''Wow. As a footnote, I'd like to include these lines from his/her pastebin (part of what would happen when $find was equal to 1):''
  {{{
whoami > ghost
read ghost < ghost
rm ghost}}}
 ''Also, the pastebin has no shebang line. All those "don't work" problems are probably the result of using bash syntax in a `#!/bin/sh` script.''

== illsci vs. greycat ==
{{{
16:17 + illsci [n=illsci@recoil.defensiblenetworks.com] joined #openssh
16:17 illsci|#openssh> hey has anyone ever seen a script or system that lets users connect and generate their ssh key's and enforces passphrase complexity?
16:18 greycat> "connect and generate the keys"??
16:18 illsci> if you had a ton of users you wanted to generate new keys for and wanted it all done on the same physical server, wanted to enforce passphrase complexity,
16:18 greycat> key generation is done on the client system, not on the server. a private key should ideally NEVER leave the machine on which it was generated.
16:18 illsci> thats fine.. pretend its not going anywhere
16:19 illsci> but you dont want to trust users to pick good passphrases
16:19 illsci> is there any systems that manage that... .wrappers to ssh-keygen or something
16:19 greycat> Since you have no control over the client system, and you have no control over the humans using it, and no knowledge whatsoever of whether there even IS a passphrase on the private key stored on the client system, I'm not sure what you want us to tell you.
16:19 illsci> just wondering if anyone uses or has seen anything like that scripted
16:19 illsci> well i guess you're not reading what i said
16:20 greycat> I have no idea what you're talking about.
16:20 illsci> im asking for a way to make sure there is a passphrase
16:20 illsci> and to make sure its a good one
16:20 illsci> ie. not a for apple
16:20 greycat> Are you on the server or on the client?
16:20 illsci> a linux server capable of generating keys
16:20 greycat> I give up.
16:20 illsci> that's where the users are
16:20 greycat> you're unhelpable.
16:21 illsci|#openssh> jesus christ
16:21 illsci|#openssh> what difference does it make if its a server or a client
16:21 illsci|#openssh> they could have walke dup to a console and had to type it in
16:22 illsci> i just want to make sure in an automated way the passphrase is good
16:22 illsci> and i dont want to knwo what it is
16:22 illsci> how is that so hard to understand
16:22 greycat> Because the private key is on the client system, not on the server system. If you're on the server you're not involved in the generation of the keypair AT ALL.
16:22 greycat> The generation is done by the user. On the client.
16:22 illsci> i understand hwo public key auth works
16:22 illsci> do you understand how key generation works?
16:22 greycat> You have no control over that process.
16:22 illsci> you get a public and private key on the same system
16:23 illsci> nevermind
16:23 illsci> you're a retard
16:23 - illsci [n=illsci@recoil.defensiblenetworks.com] left #openssh ()
}}}
 ''Awww... I didn't even get to tell him about how the users can ''change'' the contents of their private key files after generation (e.g. adding, changing or removing the pass phrase).''

== xeon-enouf vs. greycat ==
{{{
<xeon-enouf> ok, so how can i use sed to remove all the '$' that start each line, or even just remove the blank line itself?
<xeon-enouf> bah
<greycat> ##sed
<xeon-enouf> ok, so how can i use sed to remove all the '$' that END each line, or even just remove the blank line itself?
<xeon-enouf> figures
* xeon-enouf sucks
<greycat> dare I ask why you have literal dollar signs at the end of "each line"?
<bronze> -e 's/\$$//' <== maybe?
<xeon-enouf> i don't; but after my attempts, i also now have a ^M
<greycat> !cr
->#bash Carriage Return (ASCII 13). Often written as ^M or \r. CRs are found just before newlines in text files generated by DOS/Windows apps. You can see them with "cat -e". See http://mywiki.wooledge.org/BashFAQ/052 to get rid of them.
<xeon-enouf> i know what ^M is
<greycat> you can't have $ at the end of each line and ALSO have a blank line in the file.
<xeon-enouf> listen man, i don't want to argue with you; i'm in a fighting mood - just let it go ... i cannot explain it, except to say, bugs find me and 1000 variations of the same script yield nothing but reboots
<greycat> If you can't explain the problem, then we can't solve it.
<xeon-enouf> indeed - i concur
<greycat> "HOW TO DELETE $ AT THE END OF EVERY LINE" sed 's/\$$//'
<xeon-enouf> sorry for wasting anyone's time
<greycat> "HOW TO REMOVE ALL BLANK LINES" sed '/^$/d'
<xeon-enouf> now you can go fuck yourself
<greycat> They are two very different operations.
<xeon-enouf> and suck my left testicle
}}}

== harrumph vs. greycat ==
{{{
15:16:34 <harrumph> if i wanted to whois x.x.x.x >> foo and I wanted x.x.x.x as first line of new input, how?
15:16:40 <greycat> harrumph: { echo x.x.x.x; whois x.x.x.x; } >> foo
15:16:57 <harrumph> greycat: duh, thanks
...
15:22:10 <harrumph> greycat: harrumph: { echo x.x.x.x; whois x.x.x.x; } >> foo fails with syntax error near unexpected token `}' sorry don 't see why
15:22:30 <greycat> harrumph: you fucked it up somehow, probably by omitting space
15:25:14 <harrumph> greycat: ? No whois server is known for this kind of object.
15:25:24 <greycat> !exact > harrumph
15:25:24 ->#bash harrumph: Please tell us EXACTLY what you typed, and EXACTLY what the error is.
...
15:25:56 <blardydragon> greycat: i would, but the scenario is a bit difficult to explain without a simple example (imo)
15:26:08 <tuxdev> !nopaste
15:26:08 ->#bash Please don't waste our time by making us go to a pastebin just for a five-line snippet. Paste it in the channel. If you have a larger script that's showing problems, trim it down to the bare minimum size that still shows the problem. You'll probably fix it yourself once you do that.
15:26:21 <blardydragon> ok i will try and explain
15:26:33 <harrumph> ok no pastebin then
15:26:53 <harrumph> { echo x.x.x.x; whois x.x.x.x; } >> /var/log/ foo
15:26:57 <harrumph> tail foo
15:27:09 <greycat> harrumph: you have space between the directory name and the filename
15:27:10 <lhunath> is that space there deliberately?
15:27:10 <harrumph> No whois server is known for this kind of object.
15:27:29 <greycat> also, you are trying to do a lookup of a domain named x.x.x.x which is clearly and utterly stupid
15:27:30 <lhunath> if 'whois' is erroring; take it up with man whois
15:28:02 <harrumph> sorry no, i hand-replaced the filename
15:28:24 <greycat> harrumph: never type code into IRC. Paste the code.
15:28:48 <greycat> arc1:~$ whois x.x.x.x
15:28:49 <greycat> No whois server is known for this kind of object.
15:29:03 <harrumph> lol: so listen to greycat not greybot - please don't waste our time by making us go to a pastebin
15:29:25 <harrumph> greycat: oh, sorry
15:29:26 <greycat> harrumph: why are you trying to "whois" x.x.x.x?
15:29:59 <harrumph> greycat: i want to store the results in a file when i see something weird in /var.log/messages
15:30:19 <greycat> harrumph: WHY. ARE. YOU. PASSING. THE. LITERAL. STRING. x.x.x.x TO. THE. WHOIS. COMMAND?
15:30:35 <greycat> Why are you not passing some sort of valid DOMAIN NAME?
15:30:41 <harrumph> greycat: i was told to by someone here. why are you yelling?
15:30:42 <lhunath> harrumph: whois would be happier with digits instead of x'es
15:30:52 <greycat> I'm yelling because you're a fucking idiot!
15:30:58 <greycat> *plonk*
15:31:00 <drake1> greycat: that's for whois to decide
15:31:12 <greycat> drake1: and it told him. and he didn't like the answer.
15:31:32 * greycat goes to extract and enshrine this one.
}}}

You -- yes, you -- are an idiot!

Here are some other idiots in whose company you may find solace.

SpaceBass vs. greycat

  • SpaceBass> hey folks, I have a backup script I'm working on... have a TEMPDIR var that has "/Vol/Disk 2/Backups" but for some reason then I use $TEMPDIR in my tar command its not escaping the space in the disk name (which I cannot change)
    greycat> !quotes
    greybot> USE MORE QUOTES! http://www.grymoire.com/Unix/Quote.html
    ernstable> !quotes
    greybot> USE MORE QUOTES! http://www.grymoire.com/Unix/Quote.html
    ernstable> too slow
    SpaceBass> I've tried using /Vol/Disk\ 2/Backups in the variable but that didnt help either
    greycat> Try quotes.
    SpaceBass> was the quotes comment directed at me?
  • This conversation happened before greybot was updated with the > name feature. It was pretty commonplace. General rule: if an answer is given immediately after your question is asked, there's a pretty good chance the answer is for you!

zald vs. greycat

zald> how do i put \n for each line it output on this command " foovar=`cat var`; echo $foovar
greycat> !pitfalls
greybot> http://wooledge.org/mywiki/BashPitfalls
greycat> !quotes
greybot> USE MORE QUOTES! http://www.grymoire.com/Unix/Quote.html
zald> payal, what is the proper way?
zald> because the output is in online line
greycat> zald: pitfalls.  quotes.
zald> status1=`cat accesslist | grep -v -x $ipaddress1 `;
greycat> specifically the pitfall whose content is   echo $foo
redduck666> !uuoc
greybot> Useless Use of Cat (cat foo | grep bar). See <http://www.ruhr.de/home/smallo/award.html>.
greycat> redduck666: you win that one :)
redduck666> :)
zald> what will i use then to replace cat
greycat> Do you actually READ anything we tell you to read?!
zald> sorry let me check
greycat> hmm, actually the uuoc page assume the reader is not ignorant.
zald> thank you so much payal, i just put an echo "$foo" , instead of echo $foo
zald> thanks for the links
greycat> My.  Fucking.  God.
greycat> we told you THREE TIMES and then you thanked her....
floyd_n_milan> payal, meh give it a rest already
floyd_n_milan> you guys should both just *plonk* each other you know
greycat> at the moment, I'm just pissed off at that zald idiot for NOT reading the pitfalls page when I told him to (I even told him **which one to read**!)
zald> im not aware that you are talking to me then greycat
  • You didn't see the zald: on the front of the line? Try using a client that highlights lines with your name on them.

payal vs. greycat

payal> How can I make a float into integer
payal> I have a number 5.6122211 - I want to compare it with a value in $var
greycat> !faq float
greybot> http://wooledge.org/mywiki/BashFaq#faq22 -- How can I calculate with floating point numbers instead of just integers?
payal> I have no bc and don't want to use awk - and I don't want a very precise answer
greycat> If you don't care about precision, just echo 0 every time.
payal> I have 5.6122211 in a variable $b and just want to know whether it is smaller or greate than $var - nothing much
greycat> !faq float
greybot> http://wooledge.org/mywiki/BashFaq#faq22 -- How can I calculate with floating point numbers instead of just integers?
payal> ((4.3 < 2.4)) && echo Success
payal> bash: ((: 4.3 < 2.4: syntax error in expression (error token is ".3 < 2.4")
greycat> !faq float
greybot> http://wooledge.org/mywiki/BashFaq#faq22 -- How can I calculate with floating point numbers instead of just integers?
payal> greycat: I already read that the first time - that is why I said I don
payal> t want to use bc or awk
greycat> *plonk* *plonk*
trash> payal: bash cannot handle float numbers. use external tools.
trash> !faq float
greybot> http://wooledge.org/mywiki/BashFaq#faq22 -- How can I calculate with floating point numbers instead of just integers?
trash> the 3rd time now.
greycat> trash: hence the *plonk*ing.  She's the most stubborn person I've ever seen here.
trash> greycat: it's not the first time
redduck666> payal: if you are willing to settle for a simple string comparison you can use [[ $b > $var ]]
redduck666> payal: i said it is a string comparison :)
floyd_n_milan> !math
greybot> http://wooledge.org/mywiki/ArithmeticExpression
floyd_n_milan> payal, ^^ that?
greycat> floyd_n_milan: is she still asking about doing floating point comparisons?
floyd_n_milan> greycat, lol apparently
floyd_n_milan> payal, yeah, floating points not possible in bash
greycat> She's been given the FAQ entry at least 5 times now.
floyd_n_milan> mhmmm
redduck666> payal: there is no native way to do that in bash. you could break up the string in part before '.' and the part after '.' and than compare the two
floyd_n_milan> payal, are you interested in seriously learning bash
floyd_n_milan> payal, i don't doubt, i was just asking
floyd_n_milan> payal, read the O'Reilly book - Learning the bash shell, 3rd edition and then read man bash, practise and then check out the ABS guide on TLDP
floyd_n_milan> yeah it explains the basics nicely
floyd_n_milan> payal, meh give it a rest already
overrider_> payal, dude
floyd_n_milan> correction, dudette
overrider_> payal, you be either kicked or plonked
  • We don't have some super secret stash of knowledge that we hide until you ask 14 times. Really. Just accept the answer.

janson_ vs. greycat

janson_> i have many files, named like '6540141.jpg 6540157.jpg 6540165.jpg' and i will check the two last digits (41,57,65) and move them into the dir with the same name. What will be the best commands to use for this?
janson_> i think the easiest is to use find and something more
janson_> mv ofc :D
janson_> but i will need to use regexp i suppose
greycat> for file in *.jpg; do x=${file%.jpg}; n=${x: -2}; echo mv "$file" $n; done
koala_man> !pe
greybot> Parameter Expansion. Expressions like ${foo%.mp3} and so on -- see man bash, and then search for Parameter Expansion. See also, http://wooledge.org/mywiki/BashFaq#faq74 and http://tiswww.tis.case.edu/~chet/bash/bashref.html#SEC30
 [... 14 minutes later ...]
janson_> find . -type f -name "*.jpg*" , now i need to cut out "51" in the file named "xyz51.jpg", how can i use parameter expansion for this?
greycat> janson_: my complete solution wasn't good enough for you?
janson_> greycat: ow, missed it. thanks
  • Another example of people not reading the answers. At least he was reasonably polite.

I440r vs. greycat

I440r> is it possible to redirect an echo of a here document to a file?
greycat> yes.
greycat> except that you don't "echo" a here document.
I440r> like echo << zzz stuff sss >> foo isnt working for me
greycat> !pitfalls
greybot> http://wooledge.org/mywiki/BashPitfalls
greycat> Amazing how many times that one pops up.
I440r> lol. how would yo do that then? cat?
greycat> Yes.  Read.
greycat> I write these wonderful pages just for people with questions like yours.
flippo> echo doesn't handle an input stream
I440r> lol we appreciate it :)
I440r> can i have things like $1 in the here document?
flippo> It's easy to find out %]
greycat> I440r: yes.  read the man page.
greycat> you should be able to find << very easily
flippo> Or "try it and see" (TM)
greycat> Here, I think the bot even has it.
greycat> !<<
greybot> Here documents. cat <<EOF followed by several lines of text, followed by the literal string EOF on a new line, NOT indented. The portion between the EOFs is passed to the command as standard input. If 'EOF' is 'quoted', substitutions WON'T be done; usually they are.
I440r> ok the cat of teh here document worked but it echo'd it to the dispay the >> some.file didnt work
greycat> you probably put the >>output in some random location rather than on the cat command.
I440r> i put it after the end marker of teh here document
greycat> I440r: that is why you fail
greycat> redirection operators apply to commands, not to data
I440r> ok... where should it have gone? ive not seen any examples of this
greycat> 12:27  greycat> you probably put the >>output in some random location rather than on the cat command.
I440r> ok, how do i stop it echoing the end marker of teh here document?
greycat> I440r: it doesn't.
greycat> You're doing something wrong.
I440r> it is
I440r> yes
greycat> Fucking STOP lying to us, or POST the god damned code so we can point out your mistakes a FOURTH fucking time.
I440r> wtf
I440r> i jsut FUCKING said "YES
I440r> "
greycat> imadev:~$ cat <<EOF >>foo
greycat> > blah blah blah
greycat> > EOF
greycat> You have new mail in /net/home/wooledg/Maildir/
greycat> imadev:~$ cat foo
greycat> sdfkjshd not found
greycat> blah blah blah
- I440r [n=mark4@70.102.202.164] left #bash ()
greycat> Note that I already had a file named "foo" with that one line in it.
  • Unfortunately, time stamps weren't saved with this one. Despite being told repeatedly, I440r persisted in his statements that we were wrong. From my point of view, his comment of yes immediately followed, and was in response to, my comment of I440r: it doesn't.. Directly contradicting me like that doesn't tend to win my favor.

hhellpme vs. greycat

<hhellpme> how do i call a variable inside a sed command?
<greycat> !quotes
->#bash USE MORE QUOTES! http://www.grymoire.com/Unix/Quote.html
<igli> !huh
->#bash What are you really trying to do? In a sentence or two please. Not which tool you think is the right one to use, and what you are trying to do with it. Just the actual task at hand.
<hhellpme> is this bash shell scripting?
<igli> yup
<greycat> didn't the quotes page help you?
<greycat> learning when to use " vs. ' is essential, especially for your question
<hhellpme> sed: -e expression #1, char 5: Unterminated `s' command   <--this is what i got when this code is being ran http://www.pastebin.ca/479121
<igli> read the doc pointed out first
<greycat>     1. i=100
<greycat>     2. s=`expr $i + 1`
<greycat>     3. sed '$sq;d' mytextfile
<greycat> !quotes
->#bash USE MORE QUOTES! http://www.grymoire.com/Unix/Quote.html
<greycat> 11:41  greycat> learning when to use " vs. ' is essential, especially for your question
<igli> and then give us just the sed line
<igli> yeah you need "
<greycat> I un-pastebinned it for you.
<greycat> After you're done reading that, you might want to read?
<igli> that is rare ;)
<greycat> !math
->#bash http://wooledge.org/mywiki/ArithmeticExpression
<greycat> since your code doesn't have a shebang line, we don't know whether you're using bash or sh, so... we can't say for sure.
<greycat> oh, and you'll almost certainly want this one too:
<greycat> !faq concat
->#bash http://wooledge.org/mywiki/BashFAQ#faq13 -- How can I concatenate two variables?  How do I append a string to a variable?
<hhellpme> im sorry im using bash
<go|dfish> heh
<greycat> then read quotes, math, and #13.
<hhellpme> im still puzzled
<hhellpme> which is which
<igli> put #!/bin/bash at top of your script to be sure
<igli> man where's that link
<greycat> !shebang
->#bash http://homepages.cwi.nl/~aeb/std/shebang/
<igli> http://mikeash.com/getting_answers.html
<igli> read that please hhellpme
<hhellpme> yeah i did #!/bin/bash im pretty sure i dont know what to place inside sed to call the variable
<greycat> !learn answers http://mikeash.com/getting_answers.html
->#bash OK, greycat
<greycat> hhellpme: read "quotes"
<igli> please read that doc before we go any further
<greycat> I also placed a subtle hint in that last line.
<greycat> I also told you twice.
<igli> "Sometimes a real moron will reply to you, and sometimes you'll get a smart guy who's having a bad day or who didn't correctly read your question. However, most of the time you'll be talking to people who know more about the subject at hand than you do (that's why you came to them for help in the first place, remember). As such, it pays to at least entertain the possibility that they know what they're talking about."
<greycat> Is that one from a web page somewhere?
<igli> same page
<greycat> ah.  maybe I should read the whole thing.
<igli> fed up of the noise tbh ;)
<hhellpme> im trying to read the sites you gave
<igli> cool :)
<igli> hhellpme: <igli> yeah you need "
<greycat> igli: I also said, twice, that one needs to know when to use " instead of '
<igli> yeah i know greycat ;)

  [[ A few minutes later... ]]

<hhellpme> i really cant get it
<greycat> REPLACE THE MOTHER-HUMPING ' WITH "
<greycat> THEN REPLACE THE FUCKING sq WITH {s}q
<redondos> lol
  • No comment needed on this one.

ideasman_42 vs. greycat

<ideasman_42> so is there any way to get the current directory of the running script?
<ideasman_42> (from thin the script)
<ideasman_42> #!/bin/bash
<greycat> the current working directory is $PWD
<ideasman_42> echo ...running in this dir...
<greycat> the location of the script is unavailable and in many cases meaningless because the script does not even exist....
<greycat> echo "running in $PWD"
<ideasman_42> yeah, but that dosnt work because if you launch the script from another dir
<mikmor1> ideasman_42: you can try  $(cd `dirname $0`; pwd)
<greycat> what do you ACTUALLY want?
<ideasman_42> I want the path the script its self is in
<greycat> !faq location > ideasman_42
->#bash ideasman_42: http://wooledge.org/mywiki/BashFAQ#faq28 -- How do I determine the location of my script?  I want to read some config files from the same place.
<greycat> Why?
<ideasman_42> because there is a binary in the same dir
<ideasman_42> arg, was looking directory as keyword
<greycat> put them both in /usr/local/bin instead.
<greycat> problem solved.
<ideasman_42> no
<ideasman_42> its not so simple
<greycat> (Oh, how dare you, greycat?!  You can't actually suggest that people do NORMAL, SENSIBLE things!!  You have to feed their need to do weird l33t things that make no sense instead!  Especially impossible ones!)
<ideasman_42> blender3d is distributed as a tarball at the moment
<mikmor1> ...
<mikmor1> does mine not work for you?
<greycat> so fucking install it.
<ideasman_42> its file structure works the same on all OS's at the moment
<ideasman_42> so its not that unixy
<ideasman_42> anyway, it dosnt install into /usr/bin etc
<greycat> who cares?
<ideasman_42> just extracts and runs
<greycat> you mean it installs itself somewhewre.
<ideasman_42> well I care because I want a few things to be improved
<ideasman_42> it dosnt even install on unix at the moment
<ideasman_42> just unpack and run the tarball
<greycat> then I don't see what the bash question is.
<ideasman_42> well, if you unpack and run, the binary dosnt know where it is-
<ideasman_42> its a problem on unix
<greycat> wait, "unpack and run the tarball"?  you mean, "unpack the tarball" (also known as INSTALLING THE FUCKING THING) and then run it?
<greycat> isn't that what I said to do in the first place?
<greycat> install it?  and then run it?
<ideasman_42> no
<greycat> what happens when you untar it?
<ideasman_42> because it dosnt sit in the normal /usr/bin etc..
<greycat> WHO CARES?
<greycat> what happens when you untar it?
<ideasman_42> you get a binary and some config files
<greycat> in the current working directory, yes?
<ideasman_42> yeah
<greycat> so then what you do as a Unix system administrator is DECIDE WHERE YOU WANT IT TO BE, and then untar it there.
<ideasman_42> right, and that works
<ideasman_42> except for people who untar and run, it ALMOST works
<ideasman_42> but there are some glitches
<greycat> e.g., "Hey!  I think it should be in /opt/blender3d!"  mkdir /opt/blender3d && cd "$_" && tar xzvf /path/to/blender3d.tar.gz
<ideasman_42> so Id like to make it work better
<greycat> When you have done THAT, then you might be able to formulate a bash question.
<greycat> For instance, "I have an application that must be executed from the /opt/blender3d directory, but I want to be able to simply type "blender" from anywhere and have it run..."
<greycat> And then we could answer that.
<ideasman_42> I want the extracted files to run anywhere - self contained
<greycat> That answer would probably look something like,    Put the following script in /usr/local/bin and name it "blender":   #!/bin/sh   cd /opt/blender3d || exit 1; ./blender3d "$@"
<ideasman_42> no hard coded /opt or /usr stuff
<greycat> Fuck off.
<greycat> *plonk*
<ideasman_42> ?
<greycat> le3t fucking god damned twits....
<ideasman_42> this is how it works in windows
<ideasman_42> and there are good reasons to do it this way
<ideasman_42> for example there are multiple branches developed at the moment
<ideasman_42> and people cant properly test these branches if they use global dirs
<ideasman_42> its not about being leet
<ideasman_42> its about making software that does not fit the unix file layout, run in unix without problems
<ideasman_42> ok, the solutions listed involve searching the path
<ideasman_42> and that wont work in this case
<ideasman_42> since it isnt always in the path
<greycat> since I'm capturing this part of the log to post on my Idiots page, and I happened to see the lines you wrote after I /ignored you, let me respond thus:
<greycat> Make /usr/local/bin/blender-head contain    #!/bin/sh   cd /opt/blender3d-head && ./blender3d "$@"
<greycat> Make /usr/local/bin/blender contain    #!/bin/sh   cd /opt/blender3d && ./blender3d "$@"
<greycat> etc.
<greycat> Or is that not complex enough?
<ideasman_42> its too simple
  • Here we see a very common pattern from #bash. Someone comes in with a superficially simplistic-looking question that masks a deeper problem. I can see right through the mask. I know there's another, deeper problem waiting in the wings, and I try my best to solve that problem instead of the one they asked. Yet, here (as is commonly the case) the person asking the question was mired so deep in their mistakes that they weren't willing to step back and look at the big picture. Oh well. Their loss.

igli vs. greycat

<streuner> hm
<igli> !hi
->#bash Hi, and don't ask to ask ;)
<kojiro> uh, what?
<kojiro> m != i
<greycat> igli's lonely and in the mood for some 'bot lovin' again
<igli> greycat: yes, dear ;)
<greycat> You've got metal fever, boy!
<igli> ffs, who you calling boy? when did you first write a line of C, little man?
  • Moderately obscure pop culture references go right over his head.

bbots_guest40 vs. greycat

<bbots_guest40> hi
<bbots_guest40> how to fix my shell
<go|dfish> r u a bot?
<twkm> hmm.
<bbots_guest40> someone used bash in my shell
<bbots_guest40> my
<bbots_guest40> host changed pass keep them out
<greycat> oh no, not bash!?!
<bbots_guest40> please
<greycat> Speak coherently.  Ask a question that makes sense.
<greycat> If you can't think of words, start with "I'm trying to ..."
<bbots_guest40> greycat how do i fix it?
<greycat> Fix what?
<greycat> You haven't even said what's broken yet.
<bbots_guest40> i have
<bbots_guest40> bash errors.
<bbots_guest40> my files are still here..
<bbots_guest40> but it shows bash instead of my username.
<greycat> "I'm trying to..."   "The error message is: ..."
<trash> oh no, his $PS1 is gone!
<bbots_guest40> greycat, first message was when i login bash auto close my putty
<bbots_guest40> fixed that but now i enter commands ir dont accept them.
<greycat> Unhelpable.
<greycat> "When I type .... the computer says ...."
<bbots_guest40> ls
<greycat> Paste ACTUAL OUTPUT.  Do not type vague descriptions.
<bbots_guest40> neostats unreal.config etc..
<greycat> So the ls command works?  Good.
<bbots_guest40> bash errors
<twkm> to fix bash use an admin.
<greycat> Fucking HELL.  I'm getting VERY tired of you.
<greycat> Paste EXACTLY what the fuck the error is, or go away.
<bbots_guest40> i'm root
<greycat> You shouldn't be root.  You're not intelligent enough.
<bbots_guest40> greycat i'm on internet chat
<greycat> Not with me any more.  *plonk*
<bbots_guest40> what servr!
<go|dfish> 'bbots - (B)ash (BOT) (S)cripts. IRC bots written in bash. The bots are self contained and have everything needed to load and run. More modules and development on http://bashscripts.org'
  • "Unhelpable." I still stand by that one even after reviewing this.

igli vs. go|dfish

<gladier> hey guys - need a quick hand playing with getopt ... isnt making any sense to my head
<gladier> want to parse a -s flag and if it contains anything set a var to its contents
<twkm> while getopts s: in s) var=$OPTARG;; ?) echo invalid option;; esac; shift $((OPTIND-1))
<twkm> bah, while getopts s: foo; do case $foo in ... esac; done; shift ...
<gladier> shouldnt there be a case before the esac?
<igli> second one
<twkm> yes there should be, see the mock revision.
<gladier> while getopts s: foo; do case $foo in s) var=$REV;; ?) echo invalid option;; esac; done; seems to set my var to ?
<igli> var=$OPTARG;;
<igli> as twkm said
<twkm> wtf did you do to my OPTARG?
<twkm> OPTARG is not a random name.  var is.  (as is foo).
<twkm> given options of ''-s abc'' my (corrected) example would set var to abc.
<gladier> aha! success
<gladier> constraints of numbers and periods on a variable?
<igli> nice idea
<igli> !faq valid
<greybot> http://wooledge.org/mywiki/BashFAQ#faq54 -- How can I tell whether a variable contains a valid number?
<twkm> ''man bash'', definitions section.
<gladier> alright .. have it implemented properly but im not entirely sure on my test in the if statement. seems to do funny things. http://pastebin.com/d3f2a6e8f
<Gekz> lol
<gladier> wth are you doing in here Gekz
<igli> hehe
<Gekz> i'm everywhere
<igli> you need to move the code handling OPTARG into the case branch
<igli> ![[
<greybot> [[ is a shell keyword similar to (but more powerful than) the [ command. See http://wooledge.org/mywiki/BashFAQ#faq31 and http://wooledge.org/mywiki/BashGuide#Bash_Tests Unless you are scripting for POSIX sh we recommend [[.
<igli> !basename
<greybot> basename removes everything except the rightmost word in a path expression. In modern times we use parameter expansion, like "${var##*/}". (Yes, parameter expansion can also remove the file's extension. See !pe.)
<go|dfish> gladier: ALWAYS check 'cd' executes successfully.
<igli> !quotes > gladier
<greybot> gladier: USE MORE QUOTES! Read http://bash-hackers.org/wiki/doku.php?id=syntax:words to understand why. http://www.grymoire.com/Unix/Quote.html will tell you how. -- Optimally, you should quote every parameter expansion ($foo).
<go|dfish> FUCKING HELL
<go|dfish> JESUS FUCKGIN CHRIST
<igli> that is the most important one imo
<gladier> shush ... its a quick and dodgey script
<igli> cp -r $DIR $DIR-$SVN-1 # is *dangerous*
<igli> (with the others too)
<go|dfish> 'shush' ?
* igli sees that go|dfish's medication has run out.
<go|dfish> What the hell are you asking for opinions for if you're going to say that.
<go|dfish> Shut up igli, you retard.
<igli> yes dear ;)
<igli> take a chill pill ffs
<go|dfish> I don't have any.
<go|dfish> He asks for advice, says shush when he gets advice.
<igli> well go see your doctor again, and this time try not to hit him
<go|dfish> Go away or i'll delete a factoid and you can /part again.
<go|dfish> gladier: Asking for help, and replying with 'shush' will not get you help.
<igli> wooh
<go|dfish> You either want help, or you do not.
<go|dfish> You shouldn't be a dick to people who offer help.
<igli> while others /need/ help, but don't see it. ;)
<gladier> want help - lacking the expletives
<igli> read the urls given, for help on the basics
<go|dfish> igli: If you are referring to me, go look in a mirror.
<go|dfish> gladier: a lack of quotes and not checking cd, would be the initial thing i'd fix.
<go|dfish> You can then clean up stuff, like the foo | grep | cut, the use of basename, etc.
<igli> go|dfish: w/e you're still a bitch and will prob'y remain one till the day you die. kthxbye
<igli> i suggest you try /ignore for a bit. god knows i had to ignore you for long enough
<go|dfish> igli: I don't need to.
<Gekz> lol
* Gekz enjoys the bitchfight
<igli> hehe
<go|dfish> Ah Gekko, I like your hostmask :)
<Gekz> lol
<Gekz> danke.
<igli> jeez talk about moodswings. ;)
<kojiro> Mendel has decided not to take my advice about the contributed script on TLDP ABS guide.
<kojiro> I guess it will stay broken.
  • These two have a history of conflict. Not quite sure who was the "idiot" here, since I didn't post this one.

cptmorgan vs. greycat

<cptmorgan> how would i have bash properly ls and grep just for file names to create a command with a input value for each file?
<greycat> cptmorgan: Huh?   for f in *; do mycommand "$f"; done
<matteo> cptmorgan: find -print0 |xargs -0
<matteo> or for i in *
<cptmorgan> matteo: thx you
<cptmorgan> matteo: for i in INPUT-FILES/prom*; do find INPUT-FILES/ -name prom* -print0 | xargs -0; done
<greycat> what the FUCK?
<matteo> omfg
<cptmorgan> matteo: whoops...
<matteo> cptmorgan: use for OR find
<greycat> cptmorgan: Just tell us what you want to do.  We'll write the code.
<cptmorgan> i was editing that and gonna erase things and hit enter by accident
<lhunath> cptmorgan: there's so much wrong with that..
<matteo> for i in INPUT-FILES/prom*; do something $i; done
<matteo> OR
<lhunath> cptmorgan: use -exec, not -print0 | xargs -0
<matteo> find INPUT-FILES/ -name 'prom*' -print0 | xargs -0 something; done
<matteo> btw
<matteo> a BASH for is better
<matteo> so trash find
<cptmorgan> i basically have a script that sets a qsub job. that script runs a second script that has a variable for the input file and goes on to execute the command.  i want to change this variable so it will look for a file(s) in a directory and run the script for each one
<greycat> cptmorgan: so you want to run "foo" on every file in a directory, one at at time?    for f in *; do foo "$f"; done
<cptmorgan> greycat: i have a script that runs this inside it: /opt/torque/bin/qsub -l nodes=1:ppn=${N} pbs_mpich2.sh;done but then goes on to wait for the script to finish and times it.  thing is in that second script i set a variable for the input file.  i want to change this variable so that it will take a directory listing and run the problem for each one. so 2 commands need to be executed.
<greycat> cptmorgan: ${N} is a filename?
<greycat> I'm totally lost.
<cptmorgan> greycat: INPUT-FILES/prom-??????-??????.tfa
<greycat> I can't follow 75 conversations at once when one of them is all vague and hand-wavey and talks about variables that aren't shown.
<cptmorgan> i will post my scripts
<greycat> Why can't you just say what you want the script to DO?
<greycat> Then we can tell you what commands to use.
<cptmorgan> greycat: look at the JOBSIZEDESC variable in the second script. thats what i want to change to multiple files. http://pastebin.com/m7f72d1af
<greycat>    132.
<greycat> hundred thirty two lines!!
* greycat whimpers and hits the left arrow lest he be sucked into the pit of despair
<cptmorgan> greycat: 108
<flash42> yeah no fair to count in blanks
<greycat> Like I'm going to COUNT them?!
<greycat> The highest numbered line on the screen was 132.
<cptmorgan> greycat: -p blastn -d human_g -i ${MB_INPUT} -o ${MB_OUTPUT}"  how can i get that INPUT variable from a list of directories.? that better?
<greycat> I don't see an INPUT variable there.
<greycat> I see MB_INPUT and MB_OUTPUT
<cptmorgan> MB_INPUT=input.${JOBSIZEDESC}
<cptmorgan> its set to medium. so it grabs input.medium
<greycat> for f in *; do blastn -d human_g -i "$f" -o "$f".output; done
<greycat> I don't know how many fucking times I have to write it!
<greycat> This is, what, 4 times you've been shown it now?
<cptmorgan> greycat: i have to figure out a better way to explain this. ya your right but the first script has to run qsub for every one of those file too
<greycat> Then do that.
<cptmorgan> greycat: i got it! could i have a simple bash line that would create a new pbs_script and replace that INPUT variable? that way the first script could just start qsub pbs_scripts*.sh
<greycat> cptmorgan: "I have _____.  I want to _____."
<greycat> For example, the first blank might be "7 *.frob files in one directory".
<anonymouz666> hah
<greycat> The second might be "run qsub -qbert <filename> and then blastn -i <output of qsub> for each file".
<anonymouz666> that's what I call babysit
<cptmorgan> greycat: exactly
<greycat> for f in *; do qsub -qbert "$f" -output "$f".qsub; blastn -i "$f".qsub -o "$f".blasted; done
<greycat> That's FOUR times I've told you "for f in *; do ...".  And I'm pretty sure someone else had one also.
<cptmorgan> greycat: THAT method will not work for what i have to do.
<greycat> cptmorgan: *plonk*
  • "You mean you want to do this?" "Exactly." "Well, then you do it like this...." "That won't work for what I have to do." ... That means you lied to me when you said my example was "exactly" right! Argh! Make up your mind!

x86 vs. greycat

<x86> I'm trying to find files older than 30 days
<greycat> !find > x86
->#bash x86: http://wooledge.org/mywiki/UsingFind
<felipe_> teh scrip command?
<x86> so I do find /path -mtime 30
<savetheWorld> felipe_: "script"
<x86> but I get nothing
<greycat> x86: -30 not 30
<greycat> oops.
<greycat> x86: +30 not 30
<x86> even if I do find /path -mtime 1
<x86> greycat: thanks
<greycat> !find > x86
->#bash x86: http://wooledge.org/mywiki/UsingFind
<x86> now is ctime basically "create" time?
<trash> no
<savetheWorld> !ctime
->#bash ctime is NOT creation time! It's (metadata) change time. It's updated whenever a file's ownership, permissions, etc. change. Unix does not store creation time of a file ANYWHERE, at all. There is no way you can possibly know when a file was created, unless you're on a system with nonstandard file system extensions.
<x86> greycat: seems if I do: "find /path -mtime +30 -exec rm {} \;" I get "missing argument to '-exec'"
<greycat> x86: You did not get that error from that command.  Try again.
<trash> x86: what system are you on?
<lhunath> ppc.
<greycat> At least, you didn't get that error from that command in a Bourne family shell.
<x86> ah, i was missing the \; ;)
<x86> thanks guys
<lhunath> eval "find /path -mtime +30 -exec rm {} \;"   <- that might cause it.

...

<x86> say each line of a file contains a file name, some of which may have spaces
<x86> it seems when I do "for x in `cat ${file}`", it makes the names with spaces into two distinct entries
<greycat> !faq 1 > x86
->#bash x86: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?
<greycat> !find > x86
->#bash x86: http://wooledge.org/mywiki/UsingFind
<x86> greybot: not using find this time ;)
<greycat> It just *happens* to be *identical* to the output of find.
<greycat> But you're not using find.
<greycat> Right.
<x86> greycat: I use find to generate the file, then I use a for loop to parse it
<greycat> Don't.
<x86> just telling you i'm not using find to do the second part ;)
<x86> while read looks good
<greycat> I'm just telling you you're a moron.
<x86> greycat: becasue I didn't know how to do it better somehow I'm a moron?
<x86> nice methodology
<greycat> *plonk*
<x86> really prognostic
<greycat> It's not like I FAILED to give you all the relevant URLs as soon as you started asking the question.
<x86> greycat: you gave me the correct URLs and I'm reading them
* greycat guesses x86 was too busy regurgitating his crappy problem instead of reading the URLs provided.
<x86> greycat: and I even mentioned I'll move to while read, like your URL said
<x86> wow man nice attention span...
<x86> you totally missed that I guess ;)
  • Once again, there's a deeper problem that the person asking the question refuses to address. They've made a mistake already, and even when that mistake is pointed out, they refuse to step back and take a different path to avoid it. They demand that we tell them the next step which will somehow magically cancel out their original mistake. Extremely frustrating.

sanguisdex vs. greycat

2008-03-27 14:49:23 <sanguisdex> this will be easy for you but My bash foo is not as in tune. basically I have a very long list of files that should be there, but due to a system error quite a few were lost.  is there a way to insert the list of files in to a script, and have the script list the files that are not found?
2008-03-27 14:49:48 <greycat> !faq 1 > sanguisdex
2008-03-27 14:49:48 ->#bash sanguisdex: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?
2008-03-27 14:50:28 * BenHoltz wonders if greycat is really a bot... :P
2008-03-27 15:03:40 <sanguisdex> ok greycat, I read your page but what seem to to be missing is how to tell the script what file too read.  can you help me fill in the blanks on this http://pastebin.com/d148c66f7
2008-03-27 15:04:32 <prince_jammys> that aint gonna work
2008-03-27 15:04:42 <greycat> The very... first... example.  In the FAQ.
2008-03-27 15:05:06 <greycat> It says:   while read line \n do \n  ....  done < "$file"
2008-03-27 15:05:16 <prince_jammys> $file=foo is not bash
2008-03-27 15:05:25 <greycat> !pitfalls > sanguisdex
2008-03-27 15:05:25 ->#bash sanguisdex: http://wooledge.org/mywiki/BashPitfalls
2008-03-27 15:05:29 <greycat> !faq 1 > sanguisdex
2008-03-27 15:05:29 ->#bash sanguisdex: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?
2008-03-27 15:05:42 <prince_jammys> [[ -f "$line" ]]
2008-03-27 15:05:44 <CrackZmoQ> sanguisdex: also, it's not "$file = source $1"
2008-03-27 15:05:53 <CrackZmoQ> that's quite phpish
2008-03-27 15:05:55 <prince_jammys> errm [[ -f $line ]]
2008-03-27 15:06:29 <sepen> while read line; do echo $line; done < file
2008-03-27 15:06:52 <sanguisdex> CrackZmoQ: I work promaraly in php
2008-03-27 15:06:56 <CrackZmoQ> while read line; do echo "$line"; done < file
2008-03-27 15:07:03 <CrackZmoQ> sanguisdex: bash is not php
2008-03-27 15:07:09 <sanguisdex> I know
2008-03-27 15:07:13 <sanguisdex> I am trying to learn
2008-03-27 15:07:34 <sanguisdex> but I commonly read the faq and make files backwards
2008-03-27 15:11:23 <sanguisdex> (03:05:30 PM) "greybot: sanguisdex: http://wooledge.org/mywiki/BashFAQ/001 -- How can I read a file line-by-line?," the first example has nothing to do w/ how to reference the file that I can see, unless I am supposed to know that I am supposed to change $file to the file name
2008-03-27 15:12:09 <greycat> sanguisdex: *plonk*
2008-03-27 15:12:13 <prince_jammys> there's bigger problems in that script than "reading line by line"
2008-03-27 15:12:17 <greycat> My.  God.
  • You can't tell that a variable named file might just possibly contain a filename??

nullcode_ vs. greycat

16:54 + nullcode_ [n=nullcode@unaffiliated/nullcode] joined #hpux
16:59  nullcode_|#hpux> how to delete a route ?
16:59 Irssi: You are now talking in #hpux
16:59  greycat> man route
16:59  nullcode_> lol
16:59  nullcode_> greycat, i already did that
16:59  nullcode_> but hp-ux's man pages are not that useful
16:59  nullcode_> i tried everything
16:59  greycat> typically you use something like "route del a.b.c.d e.f.g.h" or "route delete a.b.c.d" or ...  until you figure out what syntax works on that particular unix
17:00  nullcode_> dude, that didn't help yet
17:00  nullcode_> =/
17:00  nullcode_> i tried everything and still, it sux
17:00  nullcode_> =/
17:00  OctZ> rm -rf / deletes the route on reboot
17:00  greycat> you did "route delete 10.76.142.0 10.76.142.103"?
17:01  greycat> and you also did "route del 10.76.142.0 10.76.142.103"?
17:01  greycat> and you also did "route delete 10.76.142.0"?
17:01  greycat> and you also did "route del 10.76.142.0"?
17:01  nullcode_> OctZ, that wasn't funny =/
17:01  nullcode_> dude
17:01  nullcode_> it's route delete
17:01  nullcode_> not route del
17:01  greycat> Ok then.
17:01  nullcode_> usage: delete destination [netmask mask] gateway
17:01  greycat> Since you're the expert, you should be able to delete the route.
17:01  nullcode_> i tried that but it didn't work
17:02  nullcode_> if i was an hp-ux expert , i wouldn't have came here
17:02  nullcode_> plus
17:02  nullcode_> am a unix guru 
17:02  nullcode_> but not hp-ux
17:02  greycat> It even tells you that it wants BOTH the destination and the gateway.
17:02  greycat> So it should be "route delete 10.76.142.0 10.76.142.103".
17:02  nullcode_> AIX, Solaris, linux, bsd
17:02  nullcode_> that didn't work
17:02  nullcode_> route delete <netIP> <GW>
17:02  nullcode_> =/
17:02  greycat> THEN SHOW US THE FUCKING COMMAND YOU RAN AND THE FUCKING ERROR!
17:03  nullcode_> NS1:/#route delete 10.0.49.0 255.255.255.0 10.0.16.3
17:03  nullcode_> delete host 10.0.49.0: gateway 255.255.255.0: No such file or directory
17:03  nullcode_> NS1:/#
17:03  greycat> You put in 3 arguments after delete.
17:03  greycat> It wants 2.
17:03  nullcode_> be decent
17:03  nullcode_> ok
17:03  nullcode_> lemme show you =]
17:03  greycat> imadev:~$ netstat -rn
17:03  greycat> Destination     Gateway         Flags   Refs     Use  Interface  Pmtu PmtuTime
17:03  greycat> ^^^         ^^^
17:03  nullcode_> NS1:/#route delete 10.0.49.0 10.0.16.3
17:03  nullcode_> delete host 10.0.49.0: gateway 10.0.16.3: No such file or directory
17:03  nullcode_> NS1:/#
17:04  greycat> What's your netmask?
17:04  nullcode_> /24
17:04  greycat> Then that route is not possible.
17:04  greycat> 10.0.16.3 can't be a gateway for the 10.0.49.* network
17:04  nullcode_> 10.0.49.0             10.0.16.3          UG        0  lan0          0
17:05  nullcode_> who told you that ?
17:05  nullcode_> lol
17:05  greycat> Um.... reboot?
17:05  OctZ> greycat: it's bad practice, but getting more common
17:06  nullcode_> n00bs
17:07  nullcode_> it's 
17:07  nullcode_> route delete net 10.0.49.0 netmask 255.255.255.0 10.0.16.3
17:07  nullcode_> greycat, u didn't help at all
17:07  nullcode_> and next time
17:07  nullcode_> be decent
17:07  greycat> *plonk*
17:07  nullcode_> =]
17:07  greycat> If there ever is a next time, I'll not go beyond "man route".
17:08  greycat> It's people like him that make me avoid IRC for days at a time lately.
17:08  greycat> Pretty soon, I am going to go away and never come back.

savetheWorld vs. greycat

14:57:15 <DoomSkull> anyone know how to rm all files in a directory except a particular pattern
14:57:25 <greycat> !extglob > DoomSkull
14:57:25 ->#bash DoomSkull: "Extended globs" (shopt -s extglob) allow you to say things like "all files that do not end in .jpg". See http://wooledge.org/mywiki/glob
14:57:26 <DoomSkull> ie: remove everything except *sh*
14:58:17 <savetheWorld> rm $( ls -1 | grep -v "*sh*" )
14:58:22 <greycat> No.
14:58:36 <savetheWorld> %IANAL Not tested, possibly invalid syntax, expression of an Idea only, YMMV, IANAL, YANAL etc.. yada yada, details left as an exercise for the reader to finalize.  have you called your mom lately?  ^_^
14:59:04 <savetheWorld> DoomSkull: rm $( ls -1 | grep -v "*sh*" )
14:59:16 <greycat> savetheWorld: NO!!!
14:59:24 <greycat> DoomSkull: DO NOT listen to savetheWorld
14:59:38 <savetheWorld> greycat: how would you do it?
14:59:43 <greycat> !extglob > savetheWorld
14:59:43 ->#bash savetheWorld: "Extended globs" (shopt -s extglob) allow you to say things like "all files that do not end in .jpg". See http://wooledge.org/mywiki/glob
15:00:12 <savetheWorld> bah. Does mine work or not?
15:00:23 <greycat> savetheWorld: it does NOT.  It has major whitespace issues.
15:00:37 <savetheWorld> no it doesnt
15:00:42 <greycat> savetheWorld: touch "a file name"
15:00:52 <savetheWorld> ok, ys it does
15:01:27 <savetheWorld> i never run into those because i dont allow filenames with spaces in them. :-D
15:01:35 <prince_jammys> trolling?
15:01:45 <savetheWorld> prince_jammys: who?
15:01:54 <prince_jammys> oh, noone
15:02:15 <savetheWorld> prince_jammys: no. not trolling. its a frequent issue
15:02:36 <savetheWorld> prince_jammys: and truly, I dont allow file names with shitespace in them on my systems
15:02:42 <prince_jammys> rm $( ls -l ) in this channel .... come on
15:02:58 <savetheWorld> prince_jammys: its an abortion imported from Windows
15:03:22 <prince_jammys> abortion as in abort, retry, fail?
15:03:23 <_eggy_> nothing wrong with whitespace in files, it makes you write proper commands for handling them.
15:03:37 <greycat> prince_jammys: even worse, "ls -1 | ..." is just moronic.
15:03:44 <greycat> the -1 is implicit when stdout of ls is not a tty
15:03:55 <savetheWorld> prince_jammys: every channel has idiosyncracies, that doesnt make the idiosyncrasy the truth,   Its just another part of the body of knowledge.
15:04:03 <greycat> savetheWorld: you are a fool.
15:04:20 <greycat> We aren't talking about "idiosyncracies".  We're talking about commands that do not work.
15:04:37 <savetheWorld> greycat: heh, They work here. :-)
15:05:47 <pgas> you just have to hope someone does try "touch '*'" in your directory
15:05:56 <pgas> doesn't try
15:07:04 <savetheWorld> greycat: perhaps if you were less of a nasty obnoxious <-------> you would have more success with getting your messages across.  Flaming people to a burnt cinder before giving them a good explanation or a better way does not exactly create an environment conducive to receptivity.  Besides, I already acknowledged it doesnt work with spaces above.  so whats your real motivation for being abusive?
15:08:02 <greycat> 14:57  DoomSkull> anyone know how to rm all files in a directory except a particular pattern
15:08:05 <greycat> 14:57  greycat> !extglob > DoomSkull
15:08:08 <greycat> 14:57  greybot> DoomSkull: "Extended globs" (shopt -s extglob) ....
15:08:11 <greycat> 14:58  savetheWorld> rm $( ls -1 | grep -v "*sh*" )
15:08:32 <savetheWorld> greycat: perhaps if you reversed the order and gave a good clear explanation first  and then dropped the abuse completely people would get more out of it.
15:08:47 <greycat> I did.  Your shitty, dangerous answer followed my answer.
15:08:52 <prince_jammys> but you know why ....
15:09:02 <savetheWorld> greycat: I'm talking about the way you treated me.
15:09:12 <greycat> You have been a regular in this channel for months, if not years.  You should KNOW better than to do something like that.
15:09:40 <savetheWorld> I know you never miss a chance to be nasty.
15:10:04 <greycat> No, what is NASTY is telling newbie to use commands that could remove the wrong files.
15:10:17 <savetheWorld> which counts a great deal more to me than your technical prowess. bye
15:10:28 <savetheWorld> plonk

Marchitos vs bash tests

<Marchitos> if i want to check if a variable has 1 or 0 how can i do?
<Marchitos> if [ $find == 1 ] ; then balblabla
<Marchitos> is it correct?
<kbrandt> Marchitos: Has or Is?
<Marchitos> is
<kbrandt> For is, then if [[ "$find" == '1' ]]; then
<kbrandt> Good habit to double quote variables
<Marchitos> $find can contain a number
<Marchitos> like 0 or 9
<Marchitos> if i want to check which number is i have to do: if [ "$find" == '1' ] ; then balblablal ?
<kbrandt> Marchitos: Well if there are bunch of numbers and you want to do different actions depends on which number then you want to use the 'case' construct
<Marchitos> only two case
<Marchitos> an if is good
<Marchitos> but it don't want to work
<Marchitos> maybe i'm using a wrong syntax
<kbrandt> Marchitos: Maybe:-) Why don't you ask it what it really wants to do? ;-)
<Marchitos> mmm
<Chapoolin> Marchitos:} use "[[ ]]", instead of "[ ]" . . . it was made to overcome problems with "[ ]"
<Chapoolin> hyphenated:} why?
<Marchitos> don't work
<Marchitos> if [[ "$find" == '0' ]] ; then
<Marchitos> is it right?
<Chapoolin> Marchitos:} no
<Marchitos> if [[ "$find" = '0' ]] ; then
<prince_jammys> (( find == 0 )) or (( ! find ))
<prince_jammys> !tests
<greybot> In bash, use [[ .. ]] to perform tests on strings and files. Use (( .. )) to evaluate arithmetic expressions. Only use [ .. ] when you are writing an *sh* script, *not* a bash script!
<Chapoolin> Marchitos:} "==" checks for text string.  To check for arithmetic value, use "-eq"
<Marchitos> if (( "$find" == '0' )) ; then
<prince_jammys> if (( find == 0 )); then
<prince_jammys> no dollar in (( )) is better
<prince_jammys> makes no difference, UNLESS find isn't set. then you get errors with $
<Marchitos> if (( find -eq 0 )) ; then
<prince_jammys> for fucks sake
<prince_jammys> (( find == 0 ))
<Marchitos> don't work
<Chapoolin> Marchitos:} try this: "if [[ $find -eq 0 ]] ; then"
<Marchitos> no
<Marchitos> http://pastebin.com/m309daaa1
<kbrandt> prince_jammys: What about trying to devide the variable by 0 ;-)
<prince_jammys> might as well
<Marchitos> can we do this?  find=`expr $find + 1`
<prince_jammys> (( find++ ))
<Chapoolin> Marchitos:} try this: "if [[ $find -eq 0 ]] ; then"
<Marchitos> a moment..
<Marchitos> if [ "$find" -eq 1 ] ; then
<Marchitos> works :D
  • Wow. As a footnote, I'd like to include these lines from his/her pastebin (part of what would happen when $find was equal to 1):

    • whoami > ghost
      read ghost < ghost
      rm ghost

    Also, the pastebin has no shebang line. All those "don't work" problems are probably the result of using bash syntax in a #!/bin/sh script.

illsci vs. greycat

16:17 + illsci [n=illsci@recoil.defensiblenetworks.com] joined #openssh
16:17  illsci|#openssh> hey has anyone ever seen a script or system that lets users connect and generate their ssh key's and enforces passphrase complexity?
16:18  greycat> "connect and generate the keys"??
16:18  illsci> if you had a ton of users you wanted to generate new keys for and wanted it all done on the same physical server, wanted to enforce passphrase complexity,
16:18  greycat> key generation is done on the client system, not on the server.  a private key should ideally NEVER leave the machine on which it was generated.
16:18  illsci> thats fine.. pretend its not going anywhere
16:19  illsci> but you dont want to trust users to pick good passphrases
16:19  illsci> is there any systems that manage that... .wrappers to ssh-keygen or something
16:19  greycat> Since you have no control over the client system, and you have no control over the humans using it, and no knowledge whatsoever of whether there even IS a passphrase on the private key stored on the client system, I'm not sure what you want us to tell you.
16:19  illsci> just wondering if anyone uses or has seen anything like that scripted
16:19  illsci> well i guess you're not reading what i said
16:20  greycat> I have no idea what you're talking about.
16:20  illsci> im asking for a way to make sure there is a passphrase
16:20  illsci> and to make sure its a good one
16:20  illsci> ie. not a for apple
16:20  greycat> Are you on the server or on the client?
16:20  illsci> a linux server capable of generating keys
16:20  greycat> I give up.
16:20  illsci> that's where the users are
16:20  greycat> you're unhelpable.
16:21  illsci|#openssh> jesus christ
16:21  illsci|#openssh> what difference does it make if its  a server or a client
16:21  illsci|#openssh> they could have walke dup to a console and had to type it in
16:22  illsci> i just want to make sure in an automated way the passphrase is good
16:22  illsci> and i dont want to knwo what it is
16:22  illsci> how is that so hard to understand
16:22  greycat> Because the private key is on the client system, not on the server system.  If you're on the server you're not involved in the generation of the keypair AT ALL.
16:22  greycat> The generation is done by the user.  On the client.
16:22  illsci> i understand hwo public key auth works
16:22  illsci> do you understand how key generation works?
16:22  greycat> You have no control over that process.
16:22  illsci> you get a public and private key on the same system
16:23  illsci> nevermind
16:23  illsci> you're a retard
16:23 - illsci [n=illsci@recoil.defensiblenetworks.com] left #openssh ()
  • Awww... I didn't even get to tell him about how the users can change the contents of their private key files after generation (e.g. adding, changing or removing the pass phrase).

xeon-enouf vs. greycat

<xeon-enouf> ok, so how can i use sed to remove all the '$' that start each line, or even just remove the blank line itself?
<xeon-enouf> bah
<greycat> ##sed
<xeon-enouf> ok, so how can i use sed to remove all the '$' that END each line, or even just remove the blank line itself?
<xeon-enouf> figures
* xeon-enouf sucks
<greycat> dare I ask why you have literal dollar signs at the end of "each line"?
<bronze> -e 's/\$$//'  <== maybe?
<xeon-enouf> i don't; but after my attempts, i also now have a ^M
<greycat> !cr
->#bash Carriage Return (ASCII 13). Often written as ^M or \r. CRs are found just before newlines in text files generated by DOS/Windows apps. You can see them with "cat -e". See http://mywiki.wooledge.org/BashFAQ/052 to get rid of them.
<xeon-enouf> i know what ^M is
<greycat> you can't have $ at the end of each line and ALSO have a blank line in the file.
<xeon-enouf> listen man, i don't want to argue with you; i'm in a fighting mood - just let it go ... i cannot explain it, except to say, bugs find me and 1000 variations of the same script yield nothing but reboots
<greycat> If you can't explain the problem, then we can't solve it.
<xeon-enouf> indeed - i concur
<greycat> "HOW TO DELETE $ AT THE END OF EVERY LINE"   sed 's/\$$//'
<xeon-enouf> sorry for wasting anyone's time
<greycat> "HOW TO REMOVE ALL BLANK LINES"   sed '/^$/d'
<xeon-enouf> now you can go fuck yourself
<greycat> They are two very different operations.
<xeon-enouf> and suck my left testicle

harrumph vs. greycat

15:16:34 <harrumph> if i wanted to whois x.x.x.x >> foo and I wanted x.x.x.x as first line of new input, how?
15:16:40 <greycat> harrumph: { echo x.x.x.x; whois x.x.x.x; } >> foo
15:16:57 <harrumph> greycat: duh, thanks
...
15:22:10 <harrumph> greycat: harrumph: { echo x.x.x.x; whois x.x.x.x; } >> foo fails with syntax error near unexpected token `}'    sorry don 't see why
15:22:30 <greycat> harrumph: you fucked it up somehow, probably by omitting space
15:25:14 <harrumph> greycat: ?  No whois server is known for this kind of object.
15:25:24 <greycat> !exact > harrumph
15:25:24 ->#bash harrumph: Please tell us EXACTLY what you typed, and EXACTLY what the error is.
...
15:25:56 <blardydragon> greycat: i would, but the scenario is a bit difficult to explain without a simple example (imo)
15:26:08 <tuxdev> !nopaste
15:26:08 ->#bash Please don't waste our time by making us go to a pastebin just for a five-line snippet. Paste it in the channel. If you have a larger script that's showing problems, trim it down to the bare minimum size that still shows the problem. You'll probably fix it yourself once you do that.
15:26:21 <blardydragon> ok i will try and explain
15:26:33 <harrumph> ok no pastebin then
15:26:53 <harrumph> { echo x.x.x.x; whois x.x.x.x; } >> /var/log/ foo
15:26:57 <harrumph> tail foo
15:27:09 <greycat> harrumph: you have space between the directory name and the filename
15:27:10 <lhunath> is that space there deliberately?
15:27:10 <harrumph> No whois server is known for this kind of object.
15:27:29 <greycat> also, you are trying to do a lookup of a domain named x.x.x.x which is clearly and utterly stupid
15:27:30 <lhunath> if 'whois' is erroring; take it up with man whois
15:28:02 <harrumph> sorry no, i hand-replaced the filename
15:28:24 <greycat> harrumph: never type code into IRC.  Paste the code.
15:28:48 <greycat> arc1:~$ whois x.x.x.x
15:28:49 <greycat> No whois server is known for this kind of object.
15:29:03 <harrumph> lol: so listen to greycat not greybot - please don't waste our time by making us go to a pastebin
15:29:25 <harrumph> greycat: oh, sorry
15:29:26 <greycat> harrumph: why are you trying to "whois" x.x.x.x?
15:29:59 <harrumph> greycat: i want to store the results in a file when i see something weird in /var.log/messages
15:30:19 <greycat> harrumph: WHY.  ARE.  YOU.  PASSING.  THE.  LITERAL.  STRING.  x.x.x.x  TO.  THE.  WHOIS.  COMMAND?
15:30:35 <greycat> Why are you not passing some sort of valid DOMAIN NAME?
15:30:41 <harrumph> greycat: i was told to by someone here.  why are you yelling?
15:30:42 <lhunath> harrumph: whois would be happier with digits instead of x'es
15:30:52 <greycat> I'm yelling because you're a fucking idiot!
15:30:58 <greycat> *plonk*
15:31:00 <drake1> greycat: that's for whois to decide
15:31:12 <greycat> drake1: and it told him.  and he didn't like the answer.
15:31:32 * greycat goes to extract and enshrine this one.

Idiot (last edited 2021-11-05 15:08:05 by emanuele6)