当我使用该type
命令来确定cat
是 shell 内置程序还是外部程序时,我得到以下输出:
-$ type cat
cat is hashed (/bin/cat)
-$
Run Code Online (Sandbox Code Playgroud)
这是否意味着这cat
是一个外部程序/bin/cat
?
我很困惑,因为当我检查下面的输出时,echo
我看到它既是built-in
一个程序,又是一个程序/bin/echo
-$ type echo
echo is a shell builtin
-$ which echo
/bin/echo
-$
Run Code Online (Sandbox Code Playgroud)
所以我不能使用/bin/cat
必然意味着外部程序的逻辑,因为 echo/bin/echo
仍然是内置的。
那我怎么知道是什么cat
?内置还是外置?
如何使用cat
或echo
仅使用一个命令将相同的内容写入多个文本文件?
例如,我想将“hello”写入 file1 和 file2。我试过:
echo "hello" >> file1 file2
Run Code Online (Sandbox Code Playgroud)
但它没有用。我该怎么做?
下面的例子让我感到惊讶。这似乎是直觉......除了一个事实,即有一根胡须更有用户时间的echo | sed
组合。
为什么在单独运行时echo
使用这么多sys 时间,或者问题应该是,如何sed
改变游戏状态?似乎在这两种情况下echo
都需要做相同的回声......
time echo -n a\ {1..1000000}\ c$'\n' >file
# real 0m9.481s
# user 0m5.304s
# sys 0m4.172s
time echo -n a\ {1..1000000}\ c$'\n' |sed s/^\ // >file
# real 0m5.955s
# user 0m5.488s
# sys 0m1.580s
Run Code Online (Sandbox Code Playgroud) 我想将文本附加到文件中,例如echo "abc" >>file.txt
.
但这abc
在新行之后添加
如何abc
在没有换行的情况下使用 echo 在文件末尾添加?
这三个命令有什么区别?
echo `date`
echo "`date`"
echo '`date`'
Run Code Online (Sandbox Code Playgroud)
我对实际的差异感到困惑。我认为当 ' 在它周围时意味着它是一个字符串,因此 echo 会从字面上输出字符串date
而不是显示日期?
该echo
命令不包括我提供的完整文本。例如,如果我这样做:
$ echo ' echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` '
Run Code Online (Sandbox Code Playgroud)
它输出:
echo PARAM=` grep $ARG /var/tmp/setfile | awk {print } `
Run Code Online (Sandbox Code Playgroud)
'
我的 echo 命令中的单引号 ( ) 不包括在内。如果我切换到双引号:
$ echo " echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` "
Run Code Online (Sandbox Code Playgroud)
echo
根本不输出任何东西!为什么在第一个示例中省略了单引号而在第二个示例中不输出任何内容?如何让它准确输出我输入的内容?
我正在使用以下命令即时创建消息并发送它们:
echo "Subject:Hello \n\n I would like to buy a hamburger\n" | sendmail email@example.com
Run Code Online (Sandbox Code Playgroud)
似乎当您从文件发送信息时,通过执行以下操作:
sendmail email@example.com mail.txt
Run Code Online (Sandbox Code Playgroud)
然后,sendmail 将每一行视为一个标题,并对其进行解析。但是按照我上面发送的方式,所有内容都以主题行结尾。
如果想要将带有标题的完整消息回显到 sendmail 中,那么格式是什么?怎么做?
我知道使用回声打印彩色文本,例如红色,代码是:echo -e "\e[1;31m This is red text \e[0m"
我知道在这个例子中,31 是红色的代码,其他颜色的数量是:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Run Code Online (Sandbox Code Playgroud)
对于背景颜色,数字是 40 到 47
我的问题是:\e
and[
和m
(after 31) 在这里到底是什么意思?
我在手册页中读到 \e 是转义,但我不明白这是什么意思。
我只是注意到在 Linux 上的 shell 中-e
似乎不存在该echo
命令的标志。这只是一个混乱的设置还是“正常”?
一些代码为例:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
Run Code Online (Sandbox Code Playgroud)
印刷:
-e \e[3;12r\e[3H
Run Code Online (Sandbox Code Playgroud)
这以前有效!我猜有些stty
命令出错了,现在它不再起作用了。有人建议我sh
实际上只是bash
.
我在 Bash 中尝试了 'man echo',它告诉我 'echo --help' 将显示帮助然后退出,同样,'echo --version' 将输出版本并退出。但为什么它不起作用?'echo --help' 只是简单地按字面打印 '--help'。