2011-06-22 76 views
1

我有我產生一些命令,我​​必須執行一個腳本...bash腳本:汽車類型命令

例子:

[email protected]:~$ ./myScript.sh 
some linux command (Like: ls, cd. cp, ...) 
[email protected]:~$ 

我想,當我automaticaly運行myScript.sh它像我的命令行中鍵入以下命令:

[email protected]:~$ ./myScript.sh 
[email protected]:~$ some linux command 

所以我只需要檢查是否是一切ok用命令並按Enter鍵來運行它...沒有副本需要:)

可以這樣做嗎?

編輯: 我編輯我的例子,讓大家可以看到,這個腳本不能是一個別名,因爲這個腳本返回不同的命令各一次。順便說一句...命令不是我的問題,我的問題是如何把這個「隨機」命令在那個地方。

+0

'ls -l | xargs cat'似乎相當無用(這些文件的標記和模式標誌不會作爲cat的輸入文件存在,現在它們就可以) – sehe

+0

這僅僅是一個例子......如果命令是ls -lah或者cp或者任何東西,問題是一樣的其他... – Wolfy

+0

我不確定這是可能的。有*可能*有某種方式來使用tput來做到這一點,但我不認爲它有任何用於一般用途的輸入。 –

回答

1

絕對不可以用腳本來做到這一點。

你可以寫命令到你的腳本,並等待一個按鍵...

+0

好主意////// – sehe

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

0

如果腳本正在生成命令,爲什麼它不運行它們?

如果由於某種原因,它在這樣做,那麼你可以使用「EVAL」運行命令:

eval $(./myScript.sh) 
0

編輯:這是在此又一次嘗試。 這似乎適用於所有情況。

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

執行此操作爲:$ source myScript「cmd」(添加源代碼很重要)。之後,該命令顯示在終端上,如果你想執行輸入!或按下鍵(它是歷史記錄中的最後一個命令),然後您也可以編輯該命令。同樣,這個腳本還存儲你的最後一條命令,所以如果你運行這個沒有參數的腳本,它會顯示你執行的最後一條命令。另外,還可以使用別名myscript =「source myscript」來簡化操作。

這裏是輸出的樣子:

[email protected] ~ $ source try.sh 'cat i.cpp | grep main' 
cat i.cpp | grep main 
[email protected] ~ $ !! 
cat i.cpp | grep main 
int main() 
[email protected] ~ $ . try.sh 
cat i.cpp | grep main 
[email protected] ~ $ !! 
cat i.cpp | grep main 
int main() 
[email protected] ~ $ 

我第一次嘗試: 這是最好的我能想出,但仍這有一些問題(只運行基本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。

0

您是否正在尋找一個腳本,要求您在繼續之前進行確認?你可以做到這一點與回聲和閱讀:

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

,你甚至可以換行成一個一般效用函數:

功能exec_with_confirm(){ CMD = 「$ @」 回聲-n「按進入執行:$ CMD「 閱讀 $ @ }

exec_with_confirm ls -l 
exec_with_confirm du -sk . 

這只是到目前爲止,它不會與shell元字符的工作,來處理那些你需要ŧ o修改函數以獲取一個字符串並將其傳遞給bash -c,並將其發送給引用的字符串。

如果您的意圖只是在執行前進行確認,則應該解決該問題。

如果你的意圖是讓它放在你的下一個命令行上,那麼這不會那樣做。