Differences between revisions 4 and 6 (spanning 2 versions)
Revision 4 as of 2007-03-30 16:44:29
Size: 8176
Editor: GreyCat
Comment: another one.
Revision 6 as of 2007-07-31 20:52:09
Size: 16483
Editor: GreyCat
Comment: ideasman_42 vs. FAQ #28
Deletions are marked like this. Additions are marked like this.
Line 141: Line 141:

{{{<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: [16:40] <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}}}

{{{<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}}}

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

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

{{{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?}}}

{{{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}}}

{{{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}}}

{{{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}}}

{{{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.}}}

{{{<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: [16:40] <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 ;)

<hhellpme> i really cant get it <greycat> REPLACE THE MOTHER-HUMPING ' WITH " <greycat> THEN REPLACE THE FUCKING sq WITH {s}q <redondos> lol}}}

{{{<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}}}

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