Wie bekomme ich tty Shell-Arbeitsverzeichnis?

1591
tig

Ist es möglich, ein Arbeitsverzeichnis meiner tty-Shells zu erhalten? Also \ Arbeitsverzeichnis einer beliebigen Shell, /dev/ttys???die zu mir gehört. Ich benutze OS X.

3
TTYs haben keine Arbeitsverzeichnisse, Anwendungen haben Arbeitsverzeichnisse. Ignacio Vazquez-Abrams vor 13 Jahren 2
@ Ignacio Könnte er die Granaten meinen, die in diesen Jahren laufen? Daniel Beck vor 13 Jahren 0
@ Daniel: Wahrscheinlich. Angenommen, es läuft tatsächlich eine Shell darin. Ignacio Vazquez-Abrams vor 13 Jahren 0
@Ignacio: Entschuldigung, feste Frage tig vor 13 Jahren 0

3 Antworten auf die Frage

4
Doug Harris

Schreiben Sie ein Skript, das pszur Identifizierung von ttys verwendet wird, und verwenden Sie dann lsof, um das aktuelle Arbeitsverzeichnis abzurufen. Ich schreibe das Skript nicht für Sie, aber hier sind zwei Beispiele, die Sie zum Laufen bringen sollten:

Die -fOption psttys anzeigen:

$ 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 

In diesem Beispiel wird nach Bash-Prozessen gesucht. Sie können jedoch die Prozess-IDs der vorherigen Ausgabe durchlaufen

$ 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 
"lsof" ist sehr langsam, wenn er ohne Filter aufgerufen wird, aber "lsof -a -p PID -d cwd -Fn" ist sehr schnell! tig vor 13 Jahren 1
0
tig

Basierend auf anderen Antworten:

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 
-1
Dennis Williamson

Probieren Sie diese aus, um zu sehen, ob sie Ihnen das geben, wonach Sie suchen:

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

oder

pgrep '^(k|c|ba|tc|z|)sh$' | xargs -I % ls -l /proc/%/cwd 
Es gibt ein "OSX" -Tag und ich habe speziell in Frage gestellt, dass "Ich benutze OS X": Ich habe kein / proc / ..., ich habe kein pgrep (obwohl ich denke, dass es nicht schwer zu installieren ist). Auch die Frage wurde schon sehr gut beantwortet. tig vor 13 Jahren 0