Я пытаюсь передать аргумент из командной строки в терминал. Я модифицирую сценарий, чтобы обнаружить эту команду и позволить пользователю видеть, что делает сценарий.
Это то, что я пытаюсь обнаружить.
[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 для переключателя и передачи аргументов, которые будут обнаружены, когда пользователь вводит команды?
Перенаправления и конвейеры не являются частью команды; они являются структурой конвейера между командами . Таким образом, вы не сможете искать параметр, который перенаправляет стандартный вывод или стандартную ошибку, просматривая аргументы командной строки.
Однако вы можете просмотреть /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