Это мой фактический файл WASfile

#!/bin/sh
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
Script to Add  
read -p "Press [Enter] to continue for Installation"  

Теперь я хочу поместить следующий скрипт в Script для добавления выше и затем выполнить WASfile как скрипт (который является комбинацией многих скриптов или команд).

#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1    

Я хочу объединить и использовать как показано ниже или лучший способ объединить оба сценария.

#!/bin/sh  
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1  
read -p "Press [Enter] to continue for Installation"  

Я не могу выполнить сценарий.

Итак, я попытался извлечь AWKscript в другой файл и попытаться выполнить этот AWKscript. Но проблема в том, что после извлечения основной сценарий WASfile сам ломается или дает сбой.

#!/bin/sh
sed -i '/^ *$/d' WASfile;
sed -i -e '/\/usr\/bin\/awk/,/baba/{w 1' -e 'd}' WASfile;
#!/usr/bin/awk -f

BEGIN   { FS="=" } NR==FNR { a[$1]=$0; next } $1 in a { $0=a[$1] } /^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } 1
baba
read -p "Press [Enter] to continue for Installation"

как показано ниже

#./WASfile
sed: -e expression #1, char 24: missing command
./WASfile: line 6: BEGIN: command not found
./WASfile: line 7: {: command not found
./WASfile: line 7: next: command not found
./WASfile: line 8: in: command not found
./WASfile: line 9: syntax error near unexpected token `/^#/,'
./WASfile: line 9: `/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  '

1 ответ1

0

Из вашего вопроса я понимаю, что ваш первый скрипт хранится в файле с именем WASfile . Вы должны убедиться, что в скрипте установлен исполняемый бит:

chmod a+x WASfile

После этого вы можете выполнить ./WASfile . Поскольку текущий каталог по умолчанию отсутствует в переменной PATH , необходимо явно указать путь либо для текущего каталога ./ либо для абсолютного пути /home/wasadm/WASfile .

То же самое относится и к сценарию AWK: сделайте его исполняемым и вызовите его с указанным путем.

Из скрипта WASfile вы можете вызвать его так же, как из командной строки. Командная строка также является оболочкой - такой же или похожей на оболочку, выполняющую сценарий firs.

#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasadm/WASfile
/path/to/the/AWKscript inputfile1 inputfile2 >outputfile1
read -p "Press [Enter] to continue for Installation"

Приведенный выше код запустит скрипт AWKscript хранящийся в каталоге /path/to/the . С файлами в качестве параметров с самоописательными именами. Поместите туда нужные файлы.

Другой вариант - явно вызывать awk . В таком случае вам не нужно включать исполняемый бит файла.

awk -f /path/to/the/AWKscript

Последний кусок кода в вопросе не будет работать

Комбинация, показанная в вашем последнем фрагменте кода, не будет работать. Unix-подобные системы предназначены для выполнения одного исполняемого файла одним интерпретатором.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .