Совершенно не ясно, что вы пытаетесь сделать. По-видимому, filename1
является (предполагается) исполняемым сценарием оболочки. filename2
содержит результат выполнения этого скрипта.
bash-4.3$ cat>filename1
Hi all
Это создает файл с именем filename1
, содержащий одну строку текста, Hi all
.
bash-4.3$ cat> filename2
Hi all
То же самое для filename2
.
bash-4.3$ cat filename1
Hi all
bash-4.3$ cat filename2
Hi all
И вы подтверждаете их содержание.
bash-4.3$ filename1 >& filename2
Это пытается выполнить filename1
, перенаправляя как его стандартный вывод и стандартный поток ошибок в filename2
.
Поскольку вы не сделали chmod +x filename1
, при попытке выполнить его вы получите сообщение об ошибке «Разрешение отказа». Даже если вы сделали chmod
, это не сработало, потому что filename1
не является допустимым скриптом (если только у вас нет команды с именем Hi
). Подробнее об этом ниже.
bash-4.3$ cat filename1
Hi all
bash-4.3$ cat filename2
bash: ./filename1:Permission denied
filename2
содержит выход (нет) и сообщение об ошибке вы получили, когда вы пытались выполнить filename1
. Предыдущее содержимое filename2
было сбито, что означает, что в создании его не было никакого смысла.
Bash поддерживает синтаксис >&
для перенаправления как stdout, так и stderr, но это не рекомендуется. &>
является предпочтительным (по крайней мере, согласно документации по bash). Или, более конкретно, вы можете написать filename1 >filename2 2>&1
.
Тот факт, что вы смогли выполнить скрипт, набрав только filename1
, указывает, что у вас есть .
, текущий каталог, в вашем $PATH
. Это плохая идея. (.
в начале вашего $PATH
особенно опасен.) Вы должны удалить .
с $PATH
; если вы хотите выполнить команду в текущем каталоге, прикрепите ее к ./
.
Вот как сделать, чтобы что-то подобное, что вы , кажется, пытается сделать:
$ cat > script
#!/bin/bash
echo Hi all
$ chmod +x script
$ ./script &> output
$ cat output
Hi all
$
Обратите внимание на #!/bin/bash
я добавил в верхней части сценария. Каждый исполняемый скрипт должен иметь строку #!
, чтобы указать, как он выполняется.
Что такое "/" перед именем файла1? – SMA
Показать вывод 'ls -l filename1 filename2' (если в текущем каталоге) –
@SMA 'тег оболочки' – Deepak