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!