Câu hỏi Làm thế nào để có được thư mục làm việc vỏ tty?


Có thể nhận được thư mục làm việc của bất kỳ vỏ tty nào của tôi không? Vì vậy, \ có được thư mục làm việc của bất kỳ trình bao trong /dev/ttys??? thuộc về tôi. Tôi sử dụng OS X.


3
2017-12-10 17:11


gốc


TTY không có thư mục làm việc, ứng dụng có thư mục làm việc. - Ignacio Vazquez-Abrams
@ Ignacio Ông có thể có nghĩa là vỏ chạy trong những ttys? - Daniel Beck♦
@Daniel: Có khả năng. Giả sử có một vỏ chạy trong đó / chúng. - Ignacio Vazquez-Abrams
@Ignacio: Xin lỗi, câu hỏi cố định - tig


Các câu trả lời:


Viết một tập lệnh sử dụng ps để xác định ttys và sau đó sử dụng lsof để có được thư mục làm việc hiện tại. Tôi sẽ không viết kịch bản cho bạn nhưng đây là hai ví dụ giúp bạn thực hiện:

Các -f tùy chọn để ps hiển thị ttys:

$ ps -f 
  UID   PID  PPID   C     STIME TTY           TIME CMD
  503  1019  1015   0   0:00.33 ttys000    0:00.43 -bash
  503 72786  1019   0   0:00.04 ttys000    0:00.06 ssh c10
  503  1275  1188   0   0:00.17 ttys001    0:00.21 /bin/bash --noediting -i
  503  1789  1188   0   0:00.04 ttys002    0:00.05 /bin/bash --noediting -i
  503  4191  1188   0   0:00.06 ttys003    0:00.07 /bin/bash --noediting -i
  503  7430  7429   0   0:00.18 ttys004    0:00.26 -bash
  503 74273 74272   0   0:00.02 ttys007    0:00.03 -bash
  503 74310 74309   0   0:00.01 ttys008    0:00.02 -bash

Ví dụ này tìm kiếm các quy trình bash, nhưng bạn có thể lặp qua các id quá trình từ đầu ra trước đó

$ lsof | grep bash | grep cwd
bash       1019 dharris  cwd      DIR       14,2      1530  1813370 /private/tmp
bash       4191 dharris  cwd      DIR       14,2      1122 40387322 /Users/dharris/src
bash       7430 dharris  cwd      DIR       14,2      4420   807137 /Users/dharris
bash      74273 dharris  cwd      DIR       14,2       306  1856173 /Applications/Preview.app/Contents
bash      74310 dharris  cwd      DIR       14,2       612  1657335 /opt/local/etc
bash      74343 dharris  cwd      DIR       14,2      4420   807137 /Users/dharris

4
2017-12-10 22:32



lsof rất chậm nếu được gọi mà không có bộ lọc, nhưng lsof -a -p PID -d cwd -F n rất nhanh! - tig


Dựa trên các thư trả lời khác:

tty_dir() {
  PIDS="$(ps -t $1 -opid= | tr -d ' ' | tr '\n' ',')"
  [[ -n "$PIDS" ]] || { echo "no pids found for $1"; return 1; }
  lsof -a -d cwd -c '/^(k|c|ba|tc|z)?sh$/' -p "$PIDS" -Fn | grep ^n | cut -c2-
}

tty_dir ttys000

0
2018-06-15 17:18





Hãy thử những cách này để xem họ có cung cấp cho bạn những gì bạn đang tìm kiếm không:

pgrep '^(k|c|ba|tc|z|)sh$' | xargs -I % readlink -e /proc/%/cwd

hoặc là

pgrep '^(k|c|ba|tc|z|)sh$' | xargs -I % ls -l /proc/%/cwd

-1
2017-12-11 16:00



Có OSX và tôi đặc biệt đề cập trong câu hỏi rằng "Tôi sử dụng OS X": Tôi không có / proc / ..., tôi không có pgrep (mặc dù tôi nghĩ rằng nó không phải là khó để cài đặt). Ngoài ra câu hỏi đã có câu trả lời rất tốt. - tig