Попытка использовать if else из getopts для передачи аргумента с терминала и записи этой информации в журнал

Я пытаюсь передать аргумент из командной строки в терминал. Я модифицирую сценарий, чтобы обнаружить эту команду и позволить пользователю видеть, что делает сценарий.

Это то, что я пытаюсь обнаружить.

[root@linuxtest] ./testscript.sh $1 -v

Эта команда предназначена для подробного описания того, что сценарий делает с терминалом, а также для записи этого в файл журнала.Теперь, в зависимости от пользователя, этот сценарий либо обнаружит команды, введенные пользователем:

sh testscript.sh $1 -v

или

./teshscript.sh -v

Теперь в сценарии уже есть команда:

exec 1> {LOG} 2> & 1

Это позволяет записывать эхо-сигналы в файл. Однако это не будет отображаться в терминале, но будет записано в текстовый файл независимо от пути, по которому хранится файл {LOG}. Прямо сейчас у меня есть следующее:

name=`sh testscipt.sh $1 -v`

if [[ -n "$name" ]]; then
   2>&1 2>&- | tee -a ${LOG}
else
   1> {LOG} 2>&1
fi

Но я не совсем уверен, какой должна быть логика, когда это нужно настроить. Я исследовал "приемы", чтобы разрешить случай, но я не слишком уверен, какой для этого синтаксис. Итак, по сути, я пытаюсь разрешить пользователю запускать это, но когда они захотят это просмотреть, им придется вводить команды, как указано, для просмотра эхо-сигналов в терминале.

Каков правильный способ сделать это с помощью команды getops / case для переключателя и передачи аргументов, которые будут обнаружены, когда пользователь вводит команды?

0
28.06.2017, 23:20
1 ответ

Перенаправления и конвейеры не являются частью команды; они являются структурой конвейера между командами . Таким образом, вы не сможете искать параметр, который перенаправляет стандартный вывод или стандартную ошибку, просматривая аргументы командной строки.

Однако вы можете просмотреть /proc/$$/fdи посмотреть, с какими0(стандартным вводом ),1(стандартным выводом )и2(стандартной ошибкой ).

$ cat foo.sh
#!/bin/bash
echo "My pid is $$"
ls -l /proc/$$/fd/
$./foo.sh 2> /tmp/errorsgohere
My pid is 30842
total 0
lrwx------ 1 username username 64 Jun 28 14:33 0 -> /dev/pts/0
lrwx------ 1 username username 64 Jun 28 14:33 1 -> /dev/pts/0
l-wx------ 1 username username 64 Jun 28 14:33 2 -> /tmp/errorsgohere
lr-x------ 1 username username 64 Jun 28 14:33 255 -> /home/username/foo.sh
0
28.01.2020, 04:44

Теги

Похожие вопросы