bash脚本:auto type命令

时间:2011-06-22 12:07:33

标签: bash command-line

我有一个脚本可以生成一些我必须执行的命令......

示例:

wolfy@wolfy-server:~$ ./myScript.sh
some linux command (Like: ls, cd. cp, ...)
wolfy@wolfy-server:~$ 

我想在运行myScript.sh时自动在命令行中输入以下命令:

wolfy@wolfy-server:~$ ./myScript.sh
wolfy@wolfy-server:~$ some linux command

所以我只需要检查命令是否一切正常,然后按回车键运行它......不需要复制:)

可以这样做吗?

修改 我编辑了我的示例,以便每个人都可以看到此脚本不能是别名,因为此脚本每次都返回不同的命令。顺便说一句...这个命令不是我的问题,我的问题是如何把这个“随机”命令放在那个地方。

5 个答案:

答案 0 :(得分:3)

最近,你可以来,恕我直言只是回应命令(正确引用!!!!)

你可以做什么:

 #!/bin/bash
 alias smartls='ls -lah / | grep "ufv" | xargs cat'

一样使用它
 source ./mySript.sh

提示:而不是source ./myScript.sh您可以说较短的. ./myScript.sh

现在,当你输入时,魔法会出现:

  

smartls ESC CTRL-E

使用默认(emacs)键绑定,这将扩展命令,将命令保留在编辑缓冲区中供您编辑/查看!

提示:选择一个非侵入但很短的别名(比如Q,对我来说会很好)并减少键入的键数

bash中的

提示learn about mapping keys and bindings并且(可能)了解如何将这三个键映射到单个键,甚至更快。也许您甚至可以在这样的密钥绑定中包含myScript.sh的来源。

HTH

答案 1 :(得分:1)

使用脚本绝对不可能做到这一点。

您可以将该命令写入脚本并等待按键...

答案 2 :(得分:0)

如果脚本正在生成命令,为什么不运行它们?

如果由于某种原因必须以这种方式完成,那么你可以使用“eval”#39;运行命令:

eval $(./myScript.sh)

答案 3 :(得分:0)

编辑:这是另一种尝试。 这似乎适用于所有情况。

if [[ $# -ge 1 ]]
then 
    str=$1;
    echo $str > myCmd
else
    str=`cat myCmd`;
fi
echo $str
history -s $str

执行此命令:$ source myScript“cmd”。(添加源代码很重要)。在终端上显示该命令之后,如果要执行该命令,请输入!!或者按 UP 键(它是历史记录中的最后一个命令),然后您也可以编辑命令。同样,此脚本还存储您的上一个命令,因此如果您运行此脚本而不带参数,则会显示您执行的最后一个命令。另外,可以使用别名myscript =“source myscript”来简化操作。

以下是输出结果:

priyank@priyank-laptop ~ $ source try.sh 'cat i.cpp | grep main'
cat i.cpp | grep main
priyank@priyank-laptop ~ $ !!
cat i.cpp | grep main
int main()
priyank@priyank-laptop ~ $ . try.sh
cat i.cpp | grep main
priyank@priyank-laptop ~ $ !!
cat i.cpp | grep main
int main()
priyank@priyank-laptop ~ $ 

我的第一次尝试: 这是我能想到的最好的,但仍有一些问题(只运行基本的cmds,没有管道等):

if [[ $# -ge 1 ]]
then
    str=$1 
    echo $1 > myCmd
else 
    str=`cat myCmd`;
fi
echo $str | cat &
t=`cat`
$str;

按Ctrl + D运行命令。如果您不想运行该命令,请按Ctrl + C. 如果出现问题,您可以复制并尝试该命令。您可以尝试编辑此脚本以满足您的需求。

您也可以将其运行为:bash script.sh“new cmd”。 新的cmd将在myCmd文件中被覆盖,该文件包含您的命令。如果没有提供cmd,那么它将使用myCmd文件中的cmd。

答案 4 :(得分:0)

您是否只是在寻找一个在继续之前要求您确认的脚本?你可以用echo和read来做到这一点:

#!/usr/bin/env bash
cmd="some command"
echo -n "press enter to execute: $cmd"
read
$cmd

你甚至可以把它包装成一般的效用函数:

function exec_with_confirm(){       CMD = “$ @”       echo -n“按Enter键执行:$ cmd”       读       $ @     }

exec_with_confirm ls -l
exec_with_confirm du -sk .

这只是到目前为止,它不适用于shell元字符,处理那些你需要修改函数以获取字符串并将其传递给bash -c,并将其发送给引用的字符串。< / p>

如果你的目的只是在执行前得到确认,这应解决这个问题。

如果您打算将它放在下一个命令行上,那么这不会那样做。