在终端中使用pipe命令需要帮助(Linux / shell文件)

时间:2016-11-01 05:00:30

标签: linux shell unix pipe

为需要使用终端中的命令完成的类做一个赋值。我在主目录中创建了一个shell文件(temp1.sh),并在文件夹(temp2.sh)中创建了一个shell文件(randomFolder)。当我运行temp2.sh时,我需要在temp1.sh中显示字符数量。我需要使用pipe命令来完成此任务。

所以我想我需要将目录更改为主目录,然后打开文件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"在我运行之后。如果我重定向到home然后键入wc -c temp1.sh,我会得到所需的输出。我希望在运行temp2.sh时发生此输出。

不使用管道命令的示例:

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

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

1 个答案:

答案 0 :(得分:0)

您的代码即将开始运作。第一部分很好:

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