linux - 将文件名参数从 Bash 传递到 Perl

标签 linux bash perl shell

我正在做我的大学作业,我偶然发现了一个我无法自己解决的问题,也许这里有人可以提供帮助,因为我没有想法......

我必须将指定为参数列表的文件名传递给我的主脚本 (Bash),然后在另一个脚本 (Perl) 中处理这些文件。

这就是我在 Bash 中的做法:

perl DisplayGroupedByArtist.pl "$@"

然后在 perl 中我像这样遍历文件:

my @files = @ARGV;
foreach $file (@files)
{
  #some stuff here
}

问题是 - 只要我不从目录外部调用脚本,它就可以正常工作。

test/bash_script.sh Samples/*.mp3

然后,传递给我的 Perl 脚本的值不是“Samples/01 Lycia - Frozen.mp3 Samples/01 Slowdive - Alison.mp3 Samples/01 The Cure - Plainsong.mp3”之类的东西,而是简单的“Samples/* .mp3”。

我想值得一提的是,在我的 Bash 脚本中我有这一行来确保我从正确的目录调用 Perl 脚本:

cd "$(dirname "$0")"

更新: 澄清一下:这里的主要问题是,如果我运行像 bash_script.sh *.mp3 这样的脚本,它会将文件列表毫无问题地传递给 Perl 脚本,而如果我执行它像 test/bash_script.sh *.mp3,传递给 Perl 的值只是一个字符串“*.mp3”,而不是文件列表。

最佳答案

你必须调整参数; Samples/*.mp3 与调用脚本的位置相关,来自,而不是脚本的位置。

tests/bash_script.sh ../Samples/*.mp3

关于linux - 将文件名参数从 Bash 传递到 Perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42416253/

相关文章:

perl - 安装 ActiveState Perl 后 ppm 不起作用

linux -/var/www/html 的权限

Linux 使用交换而不是 RAM 进行大图像处理

Linux 命令输出作为另一个命令的特定位置的输入。?

linux - 如何从特定文件夹中获取 PID

linux - 使用 while 循环时的 Bash 退出状态

perl - 使用 TreeBuilder 在 Perl 中提取链接

perl - 如何使用 Perl 检查和删除符号链接(symbolic link)(如果存在)?

linux - 计算超过 100 000 行的文件中每一行的导数

linux - 声明命令时的shell脚本错误