linux - 需要在终端(Linux/shell 文件)中使用管道命令的帮助

标签 linux shell unix pipe

为需要使用终端中的命令完成的类(class)作业进行操作。我在主目录中创建了一个 shell 文件 (temp1.sh),并在文件夹 (randomFolder) 中创建了一个 shell 文件 (temp2.​​sh)。当我运行 temp2.​​sh 时,我需要显示 temp1.sh 中的字符数。我需要使用管道命令来完成此操作。

所以我认为我需要将目录更改为主目录,然后打开文件 temp1.sh 并使用 wc -c 命令来显示字符。我一直在尝试许多不同的方法来执行此任务,但不知何故无法使其工作。任何帮助,将不胜感激。不使用管道我可以让它工作,但在使用管道时我似乎无法正确写出此命令行。

到目前为止我做了什么:

cd ~
touch temp1.sh
chmod 755 temp1.sh
echo 'This file has other commands that are not relevant and work' >> temp1.sh
mkdir randomFolder
cd randomFolder
touch temp2.sh
chmod 755 temp2.sh
echo cd ~ | wc -c temp1.sh >> temp2.sh

最后一行告诉我运行后不存在这样的文件“temp1.sh”。如果我重定向到主页然后输入 wc -c temp1.sh,我会得到所需的输出。我希望在运行 temp2.​​sh 时出现此输出。

不使用管道命令的示例:

echo wc -c ~/temp1.sh >> temp2.sh

当我运行 temp2.​​sh 时,这会为我提供所需的输出。但是我需要在使用管道命令时完成此操作。

最佳答案

您的代码即将运行。第一部分很好:

cd ~
touch temp1.sh
chmod 755 temp1.sh
echo 'This file has other commands that are not relevant and work' >> temp1.sh
mkdir randomFolder
cd randomFolder
touch temp2.sh
chmod 755 temp2.sh

所有这些都应该有效。你的问题是这部分:

echo cd ~ | wc -c temp1.sh >> temp2.sh

您需要将 cd ~ 与运行某些命令并将输出通过管道传输到 wc 的东西分开,并将全部内容存储在 temp2.​​sh 中。这可能是这样的:

echo "cd $HOME" > temp2.sh
echo "cat temp1.sh | wc -c" >> temp2.sh

这里的关键点是对 cd 命令和 wc 命令使用单独的行。对第一个命令使用 > 可确保您在 temp2.​​sh 中不会出现之前失败尝试产生的杂散垃圾。您可以通过多种方式获得相同的结果,包括:

echo "cd; cat temp1.sh | wc -c" > temp2.sh
echo "cd ~; while read -r line; do echo "$line"; done < temp1.sh | wc -c" > temp2.sh

最后,您需要执行 temp2.​​sh。您可以使用其中任何一个,尽管其中一些(哪个?)取决于您的 PATH 设置方式:

./temp2.sh
temp2.sh
sh temp2.sh
sh -x temp2.sh
$HOME/randomFolder/temp2.sh
~/randomFolder/temp2.sh

关于linux - 需要在终端(Linux/shell 文件)中使用管道命令的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40354398/

相关文章:

linux - 在 32 位操作系统上运行 64 位 jvm

c++ - 测量 NUMA(非统一内存访问)。没有可观察到的不对称性。为什么?

linux - 检查文件是否是今天创建的

linux - Bash 脚本 - 如何保持循环 'find' 命令直到找到文件?

c - 从文件中读取二维数组并打印

shell - 如何使 shell 脚本在运行时对源代码的更改具有健壮性

arrays - shell将字符串添加到数组

bash 日期最后带有周数

c - exit() 和 _exit() 的输出不同?

linux - Webapp更新shell脚本