2017-09-24 3 views
1

Je suis en train d'utiliser un script shell qui contient la commande suivante:Commande en cours d'exécution dans le terminal ne fonctionne pas dans le script shell

(./rstrings $INPUT ; cat $INPUT) | sha1sum 

Quand je lance la commande ci-dessus dans le terminal, i obtenir la sortie désirée, alors que dans mon script shell, la même commande me donne une commande non trouvée. Ci-dessous la ligne dans les problèmes de création de script:

sha1 = `(./rstrings $INPUT ; cat $INPUT) | sha1sum` 

rstrings est un c ... executible

Je suis nouveau à écriture de scripts shell et toute aide serait appréciée!

+0

Vous utilisez un chemin relatif, vous n'êtes probablement pas dans le bon répertoire lorsque cette ligne est exeuted. –

+0

J'ai couru la commande dans le même répertoire que le script shell et le c exécutable ... –

+2

Merci Cyrus, shellcheck.net m'a aidé à trouver mon erreur ... J'utilisais des espaces supplémentaires lors de l'affectation ... venant de la programmation grand public les langues m'ont fait manquer ça –

Répondre

2

J'ai eu mon erreur, j'aurais dû garder des espaces hors de la tâche.

sha1 = `(./rstrings $INPUT ; cat $INPUT) | sha1sum` 

La déclaration ci-après présente les changements nécessaires:

sha1=`(./rstrings $INPUT ; cat $INPUT) | sha1sum` 

Pour tous les autres nouveaux scripteurs shell, espaces tout en affectation ne sont pas autorisés. http://www.shellcheck.net/ est vraiment utile de suivre les meilleures pratiques dans les scripts shell et je remercie Cyrus de m'avoir orienté vers cela.

+1

Correct. D'autre part, les espaces sont * requis * dans les expressions de test (par exemple si '[" $ x "=" $ y "]' fonctionnera, mais 'if [" $ x "=" $ y "]' ne fonctionnera pas ce que vous attendez, et 'if [" $ x "=" $ y "]' ne fonctionnera pas du tout). Les espaces sont des délimiteurs importants dans la syntaxe du shell, donc ne les ajoutez pas ou ne les supprimez pas à moins qu'ils ne se trouvent dans l'un des (rares) endroits spécifiques où ils ne changent pas la signification. Et oui, [shellcheck.net] (http://www.shellcheck.net/) est votre ami. –