【发布时间】:2022-01-05 22:45:06
【问题描述】:
1.问题:
我有一个 bash 脚本(到目前为止是 2 行),它调用一个生成第二个 bash 脚本的 perl 脚本。我希望第一个 bash 脚本运行 perl 脚本并执行第二个(生成的)bash 脚本。
2。背景:
这个动态生成的 bash 脚本在 windows 上对 ubuntu bash(通过 wsl)和 cygwin bash 都可以正常执行(只要只有一个 bash 命令):
$(perl -e 'print "ls -ltr"')
3.我尝试过的不起作用(第 1 部分):
以下尝试不起作用,因为 bash 不会将分号或我的换行解释为新行,并抱怨(例如)pwd 不是 ls 的选项。
$(perl -e 'print "ls -ltr;pwd")
$(perl -e 'print "ls -ltr
pwd")
$(perl -e 'print "ls -ltr \n pwd")
有没有办法让上面的这些例子起作用?我喜欢它,因为代码确实是单行的,而且我不会为每个命令创建一个新的 shell。
4.我尝试过的方法不起作用(第 2 部分):
perl -e 'print `ls -ltr`; print `pwd`'
实际上这确实有效,但我不喜欢这种方法,因为它很慢,并且无法在生成的代码中使用 bash for 循环。它还阻止了在 bash 脚本开始时创建和修改环境变量以及以后使用它们。
5.让 perl 将 bash 脚本写入文件可能有效吗?
那么让我的 perl 动态地将 bash 脚本写入(唯一且动态命名的)文件并让这个 perl 脚本将文件名打印到标准输出,以便第一个(调用)bash 可以存储临时文件名,使用“chmod +x”并调用(执行)它,然后删除它。
没有更简单的方法吗?看来我们应该能够以某种方式使第 1 部分中的示例工作。
谢谢
齐格飞
【问题讨论】:
-
perl -e ... | bash