Debian에서 다른 배포판으로의 Nix 내장 명령/명령(echo, ps, sort, uniq)은 얼마나 안정적이고 이식성이 있습니까?

Debian에서 다른 배포판으로의 Nix 내장 명령/명령(echo, ps, sort, uniq)은 얼마나 안정적이고 이식성이 있습니까?

나는 스크립트를 작성했는데 그것이 얼마나 안정적이고 이식 가능한지 알고 싶습니다.

#!/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를 수정하는 것입니다.

관련 정보