Using the result of a command as an argument in bash?

bash, command-line

Solution

The best way to do this is with `"$(command substitution)"` (thanks, Landon):

ls > "$(pwd).txt"

You will sometimes also see people use the older backtick notation, but this has several drawbacks in terms of nesting and escaping:

ls > "`pwd`.txt"

Note that the unprocessed substitution of `pwd` is an absolute path, so the above command creates a file with the same name in the same directory as the working directory, but with a `.txt` extension. Thomas Kammeyer pointed out that the `basename` command strips the leading directory, so this would create a text file in the current directory with the name of that directory:

ls > "$(basename "$(pwd)").txt"

Also thanks to erichui for bringing up the problem of spaces in the path.

Problem

To create a playlist for all of the music in a folder, I am using the following command in bash: ``` ls > list.txt ``` I would like to use the result of the `pwd` command for the name of the playlist. Something like: ``` ls > ${pwd}.txt ``` That doesn't work though - can anyone tell me what syntax I need to use to do something like this? Edit: As mentioned in the comments pwd will end up giving an absolute path, so my playlist will end up being named .txt in some directory - d'oh! So I'll have to trim the path. Thanks for spotting that - I would probably have spent ages wondering where my files went!

Original source

Related problems