![Debian에서 다른 배포판으로의 Nix 내장 명령/명령(echo, ps, sort, uniq)은 얼마나 안정적이고 이식성이 있습니까?](https://linux55.com/image/72020/Debian%EC%97%90%EC%84%9C%20%EB%8B%A4%EB%A5%B8%20%EB%B0%B0%ED%8F%AC%ED%8C%90%EC%9C%BC%EB%A1%9C%EC%9D%98%20Nix%20%EB%82%B4%EC%9E%A5%20%EB%AA%85%EB%A0%B9%2F%EB%AA%85%EB%A0%B9(echo%2C%20ps%2C%20sort%2C%20uniq)%EC%9D%80%20%EC%96%BC%EB%A7%88%EB%82%98%20%EC%95%88%EC%A0%95%EC%A0%81%EC%9D%B4%EA%B3%A0%20%EC%9D%B4%EC%8B%9D%EC%84%B1%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
나는 스크립트를 작성했는데 그것이 얼마나 안정적이고 이식 가능한지 알고 싶습니다.
#!/bin/bash
threadsPlease() {
ps -mo lwp,c -p $1 | sort -gk 2 | uniq -f 1
}
THREAD_LINE=$( threadsPlease $1 | grep -v - | tail -1)
THREAD10=$(echo $THREAD_LINE | awk '{print $1}')
THREAD16=$(printf '%x\n' $THREAD10)
JAVA_LINE=$(jstack $1 | grep $THREAD16)
echo "OS data (thread, CPU usage %): " $THREAD_LINE
echo "Java thread: " $JAVA_LINE
스크립트는 Java PID가 지정된 시스템 및 Java 스레드 데이터를 표시합니다. 실행 예:
./whichThreadIsIt.sh 6814
OS data (thread, CPU usage %): 6838 3
Java thread: "AWT-EventQueue-0" #19 prio=6 os_prio=0 tid=0x00007f50f4090800 nid=0x1ab6 waiting on condition [0x00007f510dfbb000]
Q1: 명백한 것("jstack/java/awk/...을 사용할 수 없거나 경로에 없습니다" 또는 "잘못된 입력 데이터가 제공되었습니다") 외에 이것이 예상대로 작동하지 않는 경우(Ubuntu/Debian)는 언제입니까?
질문 2: 내 친구들은 "쉘 스크립트보다 쉘을 이식하는 것이 더 쉽습니다"라고 말합니다. 그렇다면 Fedora/CentOS, Free BSD 및 Solaris에서 이를 달성하려면 얼마나 많은 노력이 필요합니까? 원활하게 실행될 것이라고 기대하는 것이 잘못된 것입니까(Bash가 이 상자에 존재한다고 가정)?
답변1
#!/usr/bin/env bash
일반적 bash
으로 /usr/local/bin/bash
.env
ps
특히 SysV 시스템(예: Solaris)에서 BSD/GNUism을 사용하려는 경우 특히 이식할 수 없는 명령입니다. 한 가지 해결책은 GNU 도구를 어딘가에 설치한 다음 이를 포함하도록 PATH를 수정하는 것입니다.