comando de origen no encontrado en sh shell


148

Tengo un script que usa shshell. Me sale un error en la línea que usa el sourcecomando. Parece sourceque no está incluido en mi shshell.

Si intento explícitamente ejecutar sourcedesde shell obtengo:

sh: 1: source: not found

¿De alguna manera debo instalar "fuente"? ¿Tengo una versión incorrecta de sh?


1
Se podría argumentar razonablemente que un shell que admite sourcees una "versión incorrecta".
William Pursell

1
Además, el mensaje de error source: not foundsignifica que el sourcecomando se evaluó correctamente, pero el archivo que debería haber leído no existe.
Simon Richter

44
No es posible "instalar" source porque es una característica del shell. No se puede implementar como un comando externo.
Christopher Schultz

Respuestas:


152

/bin/shPor lo general, es otro shell que intenta imitar The Shell. Muchas distribuciones usan /bin/bashpara sh, es compatible source. En Ubuntu, sin embargo, /bin/dashse usa lo que no es compatible source. La mayoría de los proyectiles usan en .lugar de source. Si no puede editar el script, intente cambiar el shell que lo ejecuta.


2
¡Gracias! ¡Reemplazar / bin / sh con / bin / bash funcionó en Ubuntu! Sin embargo, tengo curiosidad por qué, ¿significa que en Ubuntu bash es sh?
Milad

1
@Milad: en Ubuntus reciente, /bin/shllamadas /bin/dash. Tradicionalmente, se /bin/shllama /bin/bashmodo de compatibilidad sh.
choroba

@Milad Creo que no funciona en ubuntu 14.04. ¿Cuál es tu versión del sistema operativo?
Reza Ameri

1
Tal vez se conozca ayuda: si tiene scripts en cascada, cambie el nombre de "sh -> bash". Gracias. :-)
BG Bruno

Desafortunadamente, no fue intuitivo para mí cómo solucionar este problema, pero me puso en el camino correcto. Tuve que agregar SHELL := /bin/basha la parte superior de mi Makefile.
anon58192932

136

En Bourne shell (sh), use el. comando para obtener un archivo

. filename

Realmente no se me permite cambiar el script, funciona bien en un servidor redhat. Pero en ese servidor, la fuente parece estar incluida en sh
Milad

2
Si lo tiene, sourceno es estrictamente sh.
tripleee

44
Tuve este tipo de problema en Jenkins (tratando de obtener un archivo almacenado como "archivo secreto") y buscando "." El comando fue la solución.
Jan Vlcinsky

Esta debería ser la respuesta principal, ya que funcionará con sh, dash y bash.
akhan

44
Para compatibilidad con Mac OS (entorno de desarrollo) y Travis-CI (entorno de prueba), tuve que usar . ./filename. De lo contrario, obtendría un sh: 1: .: filename: not founderror al ejecutar pruebas en Travis-CI.
Adrien Joly

49
$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash

Entonces estará bien


¡Agradable! Estoy ejecutando servidores RHEL y Ubuntu y siempre tengo pequeños problemas como este con Ubuntu. Realmente me gusta RHEL y RHEL como Linux.
radtek

La respuesta aceptada no funciona en Ubuntu 14, ¡esta sí!
rohithpr

Agregue alguna explicación adicional a su respuesta: ¿qué hace? dpkg-reconfigurepodría no ser accesible para todos los usuarios, especialmente en sistemas que no están basados ​​en Debian
Nico Haase

Se corrigieron mis source: not founderrores con antiguos clientes de telnet después de la actualización de Debian, gracias.
Bjoster


9

Este problema ocurre porque jenkins Execute Shell ejecuta el script a través de su / bin / sh

En consecuencia, / bin / sh no conoce "fuente"

Solo necesita agregar la línea a continuación en la parte superior de su Shell de ejecución en jenkins

#!/bin/bash

La pregunta dada no está relacionada con Jenkins después de todo
Nico Haase

8

El sourcecomando está integrado en algunos proyectiles. Si tiene un script, debe especificar qué shell usar en la primera línea, como:

#!/bin/bash

Bueno, dice #! / Bin / sh y en otro linux si ingreso manualmente sh y pregunto "qué fuente" me dice: fuente: comando incorporado de shell
Milad

oh, así que para esto era esta línea. Siempre me he preguntado. ¡muchas gracias!
CommonSenseCode

5

Enfrenté este error mientras intentaba llamar al comando de origen desde #Jenkins execute shell.

source profile.txt o source profile.properties

El reemplazo para el comando fuente es usar,

. ./profile.txt o . ./profile.properties

Nota: hay un espacio entre los dos puntos (.)


0

Encontré en un Makenile GNU en Ubuntu, (donde / bin / sh -> bash)

Necesitaba usar el. comando, así como especificar la secuencia de comandos de destino con un prefijo ./ (ver ejemplo a continuación)

fuente no funcionó en este caso, no estoy seguro de por qué, ya que debería estar llamando a / bin / bash ..

Mi variable de entorno SHELL también está establecida en / bin / bash

test:
    $(shell . ./my_script)

Tenga en cuenta que esta muestra no incluye el carácter de tabulación; tuvo que formatear para el intercambio de pila.


0

source es un comando incorporado de bash, por lo que para ejecutar el comando source, puede iniciar sesión como Root.

sudo -s source ./filename.sh


Esto no parece una solución válida. ¿Qué pasa si el usuario no tiene permisos de sudo? Y las cosas de origen luego solo están disponibles como usuario administrador, lo que causará nuevos problemas
Nico Haase

0

En Ubuntu, en lugar de usar sh scriptname.sh para ejecutar el archivo, lo he usado. scriptname.sh y funcionó! La primera línea de mi archivo contiene: #!/bin/bash

usa este comando para ejecutar el script

.name_of_script.sh

1
Esto ya ha sido respondido varias veces. Proporcione más información si agrega una nueva respuesta en tal caso
Nico Haase

-3

Esto puede ayudarlo, recibí este error porque estaba intentando volver a cargar mi .profilecon el comando . .profiley tenía un error de sintaxis


-6

Bourne shell (sh) usa PATH para ubicarse source <file>. Si el archivo que está intentando obtener no está en su ruta, aparece el error 'archivo no encontrado'.

Tratar:

source ./<filename>

55
La publicación dice que sh: 1: source: not foundnofile not found
Cristian Chaparro A.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.