cat: pid.txt: нет такого файла или каталога

У меня проблема с котом. Я хочу написать сценарий, выполняющий то же самое, что и ps -e. В pid.txt у меня есть PID запущенных процессов.

      ls /proc/ | grep -o "[0-9]" | sort -h > pid.txt

Затем я хочу использовать $ line как часть пути к cmdline для каждого PID.

      cat pid.txt | while read line; do cat /proc/$line/cmdline; done

я тоже пытаюсь зациклить

      for id in 'ls /proc/ | grep -o "[0-9]\+" | sort -h'; do 
cat /proc/$id/cmdline;
done

Не знаю, что делаю не так. Заранее спасибо.

3 ответа

Решение

Я думаю, что вам нужно это - во всех ваших подходах было несколько недостатков (или вы действительно просто хотели посмотреть на процесс с однозначным PID?):

      for pid in $(ls /proc/ | grep -E '^[0-9]+$'|sort -h); do cat /proc/${pid}/cmdline; tr '\x00' '\n'; done

Это действительно помогло моей проблеме, пока я добавлял свое местоположение пользователя, я обновлял $PATH. перед экспортом я добавил дополнительную строку как PATH =, которая испортила всю мою переменную PATH, и ни одна из команд unix не работает в Терминале.

Кажется, вы находитесь в другом текущем каталоге при запуске cat pid.txt... по сравнению с тем, когда вы запускали ls...команда. Запустите обе свои команды в одном окне терминала или используйте абсолютный путь, например /path/to/pid.txt

Помимо вашей ошибки, вы можете удалить -oиз вашей команды grep, поскольку она дает вам 1 цифру для соответствующего pid. Например, вы получите 2, когда pid равен 423. @Roadowl уже указал на это.

Другие вопросы по тегам