为需要使用终端中的命令完成的类(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/