有没有办法在命令提示符没有发出命令时让shell脚本输出文本?
背景信息:我每天多次通过SSH连接到特定的计算机,大约80%的时间,我在登录后立即输入相同的三个命令。我只是将这些命令放在我的.bashrc
中,但有20%的时间,我 NOT 想要发出这些命令。我想知道是否有一些命令可以放入.bashrc
,它会自动将一个字符串放在我的命令行中,这样当我登录时我会看到:
$ cd some/dir && ./some_script.sh
然后我可以按80%的时间输入,或者只是在20%的时间内清除文本。
答案 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:
在远程服务器上运行脚本而不是logginssh <SERVER> some/dir/some_script.sh
对于剩余的20%,您可以照常连接ssh。