Defina a variável de ambiente shell sem usar um comando interno do shell

2

Estou usando um programa que usa um "comando" como argumento e, em seguida, acrescenta alguns detalhes úteis sobre isso. Presumivelmente, em um esforço para ser útil, parece verificar se o comando "existe". Tanto quanto eu posso dizer esta verificação é algo como which . Nos meus comandos bash shell como set e export estão embutidos e, portanto, which não retorna nada.

Existe uma maneira de definir uma variável de ambiente sem usar um shell embutido.

Meu pensamento foi fazer algo como definir set.sh como

#! /bin/bash
export $1

mas isso parece um pouco louco

    
por StrongBad 15.07.2013 / 13:48

2 respostas

3

Não. Apenas a casca pode mudar seu próprio ambiente; set e export deve ser sempre interno.

Isso também vale para cd , alias e assim por diante.

O melhor que posso sugerir é reimplementar seu wrapper usando uma função de shell. Ou isso ou um script de shell que você "fonte". De qualquer forma, um wrapper que rode dentro do shell pode fazer essas coisas de maneira mais simples.

    
por 15.07.2013 / 14:08
1

Uma possível solução alternativa para o problema original seria um wrapper para o wrapper (imagem Xzibit não incluída):

#!/bin/bash

command="$1"
temp=$(mktemp -d)

> "$temp/$command"
chmod a+x "$temp/$command"

PATH+=:$temp

your_wrapper

rm -r "$temp"

Isso cria um executável vazio que passará nos testes do wrapper sem sobrescrever o comando que você realmente deseja executar (o builtin).

    
por 15.07.2013 / 14:08