Похоже, что вывод программы не является ни stdout, ни stderr?

Ваша система (, как и многие системы Unix ), не имеет внешней cdкоманды (, по крайней мере, не по этому пути ). Даже если бы он был, lsдал бы вам список исходного каталога. Внешняя команда никогда не может изменить каталог вызывающего процесса (вашей оболочки)1 .

Удалите псевдоним из среды с помощью unalias cd(, а также удалите его определение из всех файлов инициализации оболочки, в которые вы, возможно, добавили его ).

С помощью функции оболочки вы можете заставить ее работать, как обычно cd, с дополнительным вызовом lsв конце, если cdудалось:

cd () {
    command cd "$@" && ls -lah
}

или,

cd () { command cd "$@" && ls -lah; }

Это приведет к вызову команды cd, встроенной в вашу оболочку, с теми же аргументами командной строки, которые вы дали функции. Если изменение каталога прошло успешно, запустится ls.

Команда commandостанавливает рекурсивное выполнение функции оболочкой.

Определение функции (, как написано выше ), будет помещено в файл запуска вашей оболочки. С bashэто может быть ~/.bashrc. Затем определение функции будет активным в следующем новом сеансе интерактивной оболочки . Если вы хотите, чтобы она была активной сейчас , выполните определение функции, поскольку -находится в приглашении интерактивной оболочки, которое определит ее в рамках вашего текущего интерактивного сеанса.


1 В системах, где cdдоступна как внешняя команда, эта команда также не изменяет каталог для вызывающего процесса. Единственное реальное применение такой команды — обеспечение соответствия POSIX и проверка того, возможно ли изменение каталога на конкретный .

1
07.02.2020, 21:16
1 ответ

Судя по всему, это запись на стандартный ввод!
Чтобы перенаправить на StdOut

 ~#(vsftpd 0>&1)
 or
 ~#(vsftpd 0>&1)>/tmp/out.txt
1
28.04.2021, 23:24

Теги

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