Quão confiáveis / portáveis são os built-ins / comandos do Nix (echo, ps, sort, uniq) do Debian para outras distribuições

1

Eu codifiquei um script e estou pensando sobre sua confiabilidade / portabilidade.

#!/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

O script exibe o sistema e os dados do encadeamento Java, considerando o Java PID. Execução de amostra:

./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: Além do óbvio ("jstack / java / awk / ... não está disponível ou não está no caminho" ou "dados de entrada dados incorretamente"), quando isso não funciona da maneira pretendida (Ubuntu / Debian) ?

Q2: "É mais fácil portar um shell do que um shell script", meu amigo gosta de dizer. Então, quanto mais esforço isso precisaria para trabalhar no Fedora / CentOS, Free BSD e Solaris? Estou errado esperando que ele seja executado sem problemas (supondo que o Bash esteja presente nessas caixas)?

    
por LIttle Ancient Forest Kami 30.08.2015 / 17:33

1 resposta

1

#!/usr/bin/env bash

Pode ou não aumentar a portabilidade, como se bash estivesse realmente instalado em um sistema * BSD, geralmente existe em /usr/local/bin/bash . No entanto, env pode não ser portável, embora isso seja apenas para sistemas unix muito antigos ou estranhos.

ps é um comando especialmente não portátil, especialmente se você pretende usar BSD / GNUisms em um sistema SysV (por exemplo, Solaris). Instalar as ferramentas GNU em algum lugar e, em seguida, consertar o PATH para incluir essas ferramentas seria uma solução.

    
por 30.08.2015 / 19:27