Я запускаю со сценариев в человечности. Его очень легкая и хорошая вещь сделать. В моих сценариях оболочки я должен выполнить небольшое количество команды Linux, чтобы изменить каталог или удалить файлы или файлы копии или любую другую команду. Таким образом, я просто задавался вопросом, это возможное получить команду, не найденную уведомлением в сценариях так, чтобы, если какая-либо команда перестала работать когда-либо, мы могли показать сообщение об ошибке на терминале пользователю.
Я искал немного об этом на Google и узнал, что использование ниже мы можем считать терминальный ответ:
fooVar=$(ls)
echo "Response: $fooVar"
Таким образом выше я работаю ls
управляйте так на терминале, он похож на что-то:
Response:
folder1
folder2
file1
file2
Но если я делаю что-то как
fooVar=$(lsv)
echo "Response: $fooVar"
Это дает мне ошибку lsv command not found
который в порядке потому что lsv
не команда, но эта строка должна прибыть как это
Response: lsv command not found
Это возможное, или я вхожу в неправильный путь. Также, как мы можем поместить если условие для этой ошибки. Помогите.Спасибо
Ошибка,
команда lsv, не найденная
, отправляют к stderror
, тогда как нормальный вывод является sendt к stdout
. Необходимо будет перенаправить stderror
к stdout
:
$ fooVar=$(lsv 2>&1)
$ echo "Response: $fooVar"
Response: -bash: lsv: command not found
Это почти, что Вы хотите, execpt для -bash:
, Stdout имеет filedescriptor 1, и stderr имеет дескриптор 2. Таким образом, то, что я говорю, 'отправляют stderr в то же место как stdout'. Вы могли использовать что-то подобное для помещения вывода или ошибок в файлы:
ls > outfile 2> errorfile
поместит нормальный вывод в файл, названный 'outfile' и возможными ошибками в 'errfile'.
ls >> outfile 2>> errorfile
добавит в файлы вместо того, чтобы сбросить их. И можно использовать только тот или другое перенаправление.
Попробуйте это:
fooVar="lsv"
echo -n "Response "; echo `$fooVar`