如何在shell脚本的命令提示符下输入文本而不执行命令?

时间:2015-10-22 17:11:35

标签: linux bash shell

有没有办法在命令提示符没有发出命令时让shell脚本输出文本?

背景信息:我每天多次通过SSH连接到特定的计算机,大约80%的时间,我在登录后立即输入相同的三个命令。我只是将这些命令放在我的.bashrc中,但有20%的时间,我 NOT 想要发出这些命令。我想知道是否有一些命令可以放入.bashrc,它会自动将一个字符串放在我的命令行中,这样当我登录时我会看到:

$ cd some/dir && ./some_script.sh

然后我可以按80%的时间输入,或者只是在20%的时间内清除文本。

5 个答案:

答案 0 :(得分:6)

我知道这不是你问的,但为什么不用alias来缩短你的命令呢?

$ alias a='cd some/dir && ./some_script.sh'

由于您经常使用此功能,因此您可以将其添加到.bashrc文件中,这样您就不必每次都设置别名。
登录后,您只需输入a

即可
$ a

答案 1 :(得分:6)

(灵感来自Abdul Rehman's回答。)

将其作为.bashrc文件中的最后行:

read -e -p "(Control-C to cancel) $ " -i "cd some/dir && ./some_script.sh" && eval "$REPLY"
  • read -e允许您使用Readline输入字符串进行编辑。
  • -p为此一次性命令提供了伪提示。
  • -i提供了一个您可以编辑的默认字符串,或按Enter键接受。

如果按Enter键,read设置REPLY的值并退出状态为0,导致执行以下eval。 (通常,eval不是一个好用的命令;但是,在这里你会得到一个交互式shell,所以这里没有太大的风险。)如果你输入 Control - < kbd> C 而是,read以状态1退出,并且不执行以下eval,让您处于命令提示符下。

答案 2 :(得分:4)

将此脚本放在.bashrc中。它会要求您运行此命令。

while true; do
read -p "Run this command?" yn
case $yn in
    [Yy]* ) cd some/dir && ./some_script.sh; break;;
    [Nn]* ) break;;
    * ) echo "Enter Yes or No."
esac
done

答案 3 :(得分:3)

我不知道如何做到这一点但你可以使用history -s在登录时将该命令/那些命令推送到历史记录中然后让你使用!!<cr><up><cr>执行它们,如果不这样做,就会正常进行。

history -s cd some/dir '&&' ./some_script.sh

您需要引用shell通常会评估/扩展/删除的任何内容。因此,该示例中的&&,任何引号,任何分号等

答案 4 :(得分:0)

您可以通过ssh:

在远程服务器上运行脚本而不是loggin
ssh <SERVER> some/dir/some_script.sh

对于剩余的20%,您可以照常连接ssh。