为需要使用终端中的命令完成的类做一个赋值。我在主目录中创建了一个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
时,这为我提供了所需的输出。但是,我需要在使用管道命令时完成此操作。
答案 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