我通过 bash 运行 SAS 代码。
因此,当我执行ps -u <user-id>
..(1) 时,我得到以下结果:
UID PID TTY TIME CMD
327208 921620 - 0:00 sftp-server
327208 1409136 - 0:00 sshd
327208 1503426 pts/24 0:00 ps
327208 1683576 pts/24 0:00 elssrv
327208 2334914 pts/24 0:00 ksh
327208 2609352 pts/24 0:00 sas
327208 2838702 pts/24 0:04 sas
327208 3490018 pts/24 0:00 elssrv
327208 4436128 - 0:00 sftp-server
327208 4722852 pts/24 369:02 sas
327208 4964572 pts/24 0:00 elssrv
327208 5959866 - 0:01 sshd
327208 5976318 - 0:01 sshd
现在,如果我这样做ps -u <user-id>|grep sas
..(2)
我得到 sas 进程:
327208 2609352 pts/24 0:00 sas
327208 2838702 pts/24 0:05 sas
327208 4722852 pts/24 369:51 sas
另一方面,如果我执行ls -l /proc/4722852/cwd
, ..(3) 我会得到运行 PID 为 4722852 的进程的位置。
有没有办法连接(2)和(3)中的命令?
输出将是我通过运行ps -u <user-id>|grep sas
?获得的所有 SAS 代码的位置。
答案1
是的,有一个非常简单的方法可以做到这一点。其实有很多方法可以得到你想要的东西,这取决于你想要出来多少信息。我能想到的第一种方法:
ps -u <userid> | grep sas | awk '{print $2}' | xargs ls -l
前两个命令的作用与第二个命令的作用完全相同。该awk
命令仅打印出每行的第二项(默认情况下由空格分隔的项),该xargs
命令表示“将您在 STDIN 上看到的内容作为参数传递给以下命令”。