我对作业中使用的一些术语感到困惑:
所以,我理解这个问题的方式是我应该打印echo
,cat
等,我希望使用命令来执行此echo
操作,例如
echo echo
echo cat
echo ´!!´
这就是“打印在标准输出上”的意思吗?我走在正确的轨道上吗?
然后,我不知道“输入命令时标准错误上没有打印任何内容”是什么意思。
答案1
我相信你应该将这个作业解释为你需要输出这个词布洛茨依次使用每个命令echo
、cat
、ls
、grep
和。!!
echo blotz
当然是小事。
该cat
命令可以认为是输出文件的内容。 (man cat
在这里可能会有所帮助。)您的作业允许您事先准备一个文件供您输出,因此这应该非常简单。
其他人需要一些思考才能达到必要的结果。
答案2
该问题告诉您使用命令列表中的每个命令,并使该命令打印字符串blotz
而不打印其他内容。如果你的老师想在每行之后打印一个换行符blotz
(从你的问题中不清楚),你可以这样做:
$ echo "blotz"
blotz
$ echo "blotz" > file && cat file
blotz
$ touch blotz && ls blotz
blotz
$ echo blotz | grep b ## This might also include (invisible) color codes
blotz
$ echo blotz | grep --color=never b ## This one avoids the color codes
blotz
使用!!
比较棘手,因为默认情况下它还会打印命令运行。例如:
$ blotz ## run blotz to get that saved as !!
blotz: command not found
$ echo !! ## print the value of !!
echo blotz ## Unfortunately, this also prints the command being run.
blotz
为了解决这个问题,你可以编写一个小脚本:
set -o histexpand
set -o history
blotz
echo !!
然后像这样运行它:
$ bash foo.sh 2> /dev/null
blotz
使用子shell可能有一个聪明的技巧,但我还没有找到它。
如果您的老师甚至不需要换行符,请使用以下内容:
$ echo -n "blotz"
$ echo -n "blotz" > file && cat file
$ touch blotz && ls blotz | tr -d $'\n'
$ echo blotz | grep --color=never b | tr -d $'\n'
对于!!
脚本:
$ bash foo.sh 2> /dev/null | tr -d $'\n'