每当按下任意键时,如何告诉bash top停止回显文本?

xvlaze

我正在为gnome-terminal编写一个自定义的启动命令,我的意图是在每次启动它时显示一条欢迎消息。

该消息正确显示,我对其进行了编码,以使字母以0.09s的时间速率一一出现:

echo -n "W" 
sleep 0.09
echo -n "e" 
sleep 0.09
echo -n "l"
sleep 0.09
echo -n "c"
sleep 0.09
echo -n "o"
sleep 0.09 
echo -n "m"
sleep 0.09 
echo -n "e" 
sleep 0.09 

在测试时,我认为能够阻止字母的出现并su直接开始会很舒服我想出了以下解决方案:

su --command "read -n 1 -s key; if [[ "$key" == "g" ]]; then echo "Test Successful."; else echo "Test Failed."; fi;"

su -c如果我不想让bash生气并投掷炸弹,我必须使用illegal action: read -n该代码段仅用于调试目的,因为我想测试bash如何读取单行命令组合。

当我尝试从配置文件(我在其中编写用于启动的自定义命令的文件)中执行此代码时,出现了主要问题。重击返回:

No passwd entry for user 'Successful.; else echo Test'
Welcome

奇怪的是,当我su -c在默认配置文件中尝试相同的命令(不带)时,它可以正常运行,但是如果我使用su -c尝试,则不能。

尝试使用默认配置文件中的其他命令,我输入su -c "echo Hi"并运行良好。为什么会这样呢?你有什么主意吗?

达米安

将整个命令用单引号引起来,而不用双引号引起来。首先要注意的是您有一个变量($ key)。用双引号括起来,在将其作为给定参数之前将被外壳替换su第二件事是关于使用双引号将您当前所拥有的引号与之匹配,参数将像这样拆分:

  • arg0: su
  • arg1: --command
  • arg2: read -n 1 -s key; if [ <value of $key or nothing> == g ]; then echo Test
  • arg3: Successful.; else echo Test
  • arg4: Failed.; fi;

将整个args括在单引号中,可以通过按原样传递此字符串作为的第二个参数来解决两个问题,避免变量替换并解决拆分怪异性su

奖励:作为一般注意事项,请尽可能避免在测试中使用双括号,这是一种bashism(仅适用于bash的语法,可以用更兼容的对应部分代替)

以下版本应该可以正常工作。

su --command 'read -n 1 -s key; if [ "$key" == "g" ]; then echo "Test Successful."; else echo "Test Failed."; fi;'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章