2016-01-23 2 views
1

Я хотел бы выпустить команду, доступную в моей текущей оболочке (где я запускаю мой сценарий bash). Поскольку это прямо сейчас, если я поместил команду uecap в мой сценарий bash, как есть. Сценарий завершается с ошибкой. Команда uecap не найдена.Выполнить команду из текущего терминала в сценарии bash

Хотя, если я выдаю команду uecap непосредственно из текущей оболочки, она отлично работает.

Моя текущая оболочка находится в отдельном процессе с ее собственным идентификатором процесса.

вот моя Баш оболочки в качестве примера:

#!/bin/sh 
while read i 
do 
cid=`echo "$i" | cut -b1` 
rid=`echo "$i" | cut -b9-18` 
rm -rf $1_TEMP 
uecap -r rid -c cid 
done < $1ID.log 

Как я запустить скрипт Баш, выполнив эту команду:

!./bashscript $node. 

В то же нет, то есть способ запустить команду, используя другой процесс из вашего сценария bash?

+0

Что такое 'uecap' и где он находится? – bansi

+0

Он находится в другом процессе. Это специальная команда, связанная с другим процессом оболочки. Я запускаю скрипт bash из этой оболочки. Не уверен, что это устранит двусмысленность, но подумайте об этом как telnet в маршрутизаторе, а затем запустите скрипт bash. Я могу запустить сценарий bash (находясь на сервере), но я не уверен, как использовать команды telnet в моем сценарии bash. – nader

+0

, если вы хотите запустить команду в качестве другого пользователя, вы можете использовать [sudo] (http://linux.die.net/man/8/sudo) – bansi

ответ

1

Возможно, вы только что ответили на свой вопрос. Поскольку uecap является псевдонимом, он не экспортируется в процессы, выпущенные вашей интерактивной оболочкой, и вы не можете заставить их экспортировать оболочку, для псевдонимов нет команды export.

Что вы можете сделать, это создать файл, содержащий это определение псевдонима, а затем источник, чем файл из вашего сценария, что-то вроде этого:

alias uecap > ~/tmp/uecap_alias 

и в сценарии оболочки

source ~/tmp/uecap_alias 
... 
uecap -r rid -c cid 

вы также можете попытаться определить определение псевдонима uecap через переменные окружения, что-то вроде

UECAP_ALIAS="$(alias uecap)" ./your_shell_script 

и в сценарии

eval "$UECAP_ALIAS" 
... 
uecap ... 

, но нужно учитывать, что eval "$VAR" довольно хрупким на непечатаемых, цитирование и странные символы, поэтому его следует использовать с особой осторожностью и только тогда, когда вы на 100% уверены, что вы» Re: eval (подумайте о SQL-инъекциях и тому подобное).