使用命令的结果作为bash中的参数?

使用命令的结果作为bash中的参数?

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

要为文件夹中的所有音乐创建播放列表,我在bash中使用以下命令:

1
ls > list.txt

我想将pwd(打印工作目录)命令的结果用作播放列表的名称。

就像是:

1
ls > ${pwd}.txt

但这行不通-有人可以告诉我执行此类操作需要使用什么语法吗?

编辑:如评论中所述,pwd将最终给出绝对路径,因此我的播放列表最终将在某个目录中被命名为.txt-d'哦! 因此,我必须修剪路径。 感谢您发现-我可能花了很长时间才想知道我的文件在哪里!


最好的方法是使用"$(command substitution)"(感谢Landon):

1
ls >"$(pwd).txt"

有时您还会看到人们使用较旧的反引号表示法,但这在嵌套和转义方面有一些缺点:

1
ls >"`pwd`.txt"

请注意,pwd的未处理替换是绝对路径,因此上述命令在与工作目录相同的目录中创建一个名称相同的文件,但扩展名为.txt。 Thomas Kammeyer指出,basename命令将剥离前导目录,因此这将在当前目录中创建一个文本文件,并带有该目录的名称:

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

也感谢erichui提出了路径中的空间问题。


这等效于反引号解决方案:

1
ls > $(pwd).txt


按照字面意思做,您可以尝试:

1
ls > `pwd`.txt

它将使用完整的路径名,应该没问题。
请注意,如果您在主目录中执行此操作,则可能
在/ home / hoboben中,您将尝试创建/home/hoboben.txt,
上面目录中的文本文件。

这就是你想要的吗?

如果您希望目录包含以它命名的文件,您将得到
当前目录的基本名称,然后将.txt附加到pwd。

现在,而不是使用pwd命令...为什么不使用PWD环境变量?

例如:

1
ls > $PWD.txt

要么

1
ls > ${PWD}.txt

您可能想在第二个示例中记住的内容。

如果您在/ home / hoboben中,并且想创建/home/hoboben/hoboben.txt,请尝试:

1
ls > ${PWD}/${PWD##*/}.txt

如果执行此操作,文件将包含其自己的名称,因此通常,您可以通过以下几种方法之一对此进行补救。只要不使用-a标志(然后可以选择重命名结果文件),就可以重定向到其他位置并以点开头移动该文件或命名该文件,以使其对ls命令隐藏。

我编写了自己的脚本来管理音乐文件的目录层次结构,并使用了名为" .info"的子目录来将曲目数据包含在一些备用文件中(基本上,我是通过这种方式"隐藏"元数据)。可以,因为我的需求很简单,而且我的收藏很小。


我怀疑问题可能是目录名称之一中存在空格。例如,如果您的工作目录是" / home / user / music / artist name"。 Bash会以为您尝试重定向到/ home / user / music / artist和name.txt会感到困惑。您可以使用双引号解决此问题

1
ls >"$(pwd).txt"

另外,您可能不想重定向到$(pwd).txt。在上面的示例中,您将把输出重定向到文件" / home / user / music / artist name.txt"


语法为:

1
ls > `pwd`.txt

那是"?"下方的"`"字符,而不是常规的单引号。


使用以上方法将在当前目录上一级创建文件。如果要将播放列表全部都转到一个目录,则需要执行以下操作:

1
2
3
4
#!/bin/sh

MYVAR=`pwd | sed"s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt


除去目录名称以外的所有内容

1
ls >/playlistdir/${PWD##/*}.txt

这可能不是您想要的,因为那样您就不知道文件在哪里(除非您更改ls命令)

用" _"替换" /"

1
ls >/playlistdir/${PWD//\//_}.txt

但是播放列表看起来很难看,甚至可能不适合选择窗口

因此,这将为您提供一个简短的可读名称和文件内的可用路径

1
2
ext=.mp3 #leave blank for all files
for FILE in"$PWD/*$ext"; do echo"$FILE";done >/playlistdir/${PWD##/*}.txt

推荐阅读

    linux命令暂停下载?

    linux命令暂停下载?,系统,代码,暂停,第一,服务,管理,命令,进程,程序,接线,lin

    共享盘挂载命令linux?

    共享盘挂载命令linux?,系统,信息,服务,设备,电脑,名字,情况,网络,命令,磁盘,l

    linux管理磁盘命令?

    linux管理磁盘命令?,系统,情况,管理,设备,报告,单位,数据,信息,命令,磁盘,lin

    linux三十个基本命令?

    linux三十个基本命令?,工作,地址,系统,信息,命令,管理,目录,单位,数据,生产,l

    linux查询ip命令?

    linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,l

    linux命令赋予权限?

    linux命令赋予权限?,系统,密码,档案,权限,数字,地址,用户,文件,命令,目录,详

    linux命令中的花括号?

    linux命令中的花括号?,系统,电脑,密码,命令,地址,代码,工作,管理,终端,文件,l

    夸虚机linux复制命令?

    夸虚机linux复制命令?,系统,工具,项目,电脑,位置,文件,命令,基本知识,源文

    linux命令行输入汉字?

    linux命令行输入汉字?,系统,软件,发行,管理,终端,命令,模式,编辑,文件,文本,L

    linux下编号的命令?

    linux下编号的命令?,工作,系统,信息,命令,状态,地址,工具,目录,软件,基础,在L

    linux命令解压怎么用?

    linux命令解压怎么用?,系统,命令,文件,软件,管理,标准,名称,工具,文件名,目

    linux过滤命令参数?

    linux过滤命令参数?,工具,数据,标准,地址,命令,设备,系统,信息,指令,文件,如

    linux解压常用命令?

    linux解压常用命令?,系统,工具,文件,电脑,命令,平台,手机,格式,目录,文件名,

    linux入侵网站命令?

    linux入侵网站命令?,工作,地址,信息,系统,数字,网站,名称,命令,网络,密码,lin

    conf命令linux?

    conf命令linux?,系统,网络,信息,命令,管理,路径,文件,模式,终端,光标,如何在L

    linux命令写在一起?

    linux命令写在一起?,系统,工作,信息,地址,命令,文件,目录,工具,内容,功能,lin

    linux开启终端命令行?

    linux开启终端命令行?,密码,系统,电脑,终端,首页,工具,软件,命令,权限,用户,l

    linuxvi选中命令?

    linuxvi选中命令?,工作,系统,位置,信息,正规,数字,首开,模式,命令,光标,linux

    linux一键重启命令?

    linux一键重启命令?,系统,设备,工作,标准,名称,命令,服务,用户,电源,方式,lin

    linux补丁查看命令?

    linux补丁查看命令?,系统,工作,管理,命令,情况,官方网站,基础,检测,工具,目