2017-05-11 41 views
-1

J'essaie de tronquer une partie du nom de fichier de mon répertoire de travail actuel. Voici le code que je utilise:Pourquoi l'erreur signale-t-elle la variable comme non définie?

set test = "$cwd" | awk -F "/" '{print $3}' 
set USER_CUST = ${test:s/abc_//} 

(explanantion: Je veux découper la partie « abc_ » du troisième dossier de la racine)

Quand je lance le script (script_check.csh) Je reçois ceci dans ma console:

tcsh -x script_check.csh 
set test = /proj/proj_name/abc_username/folder/sub_folder 
awk -F/{print $3} 
test: Undefined variable. 

Pourquoi tester une variable indéfinie? Y at-il une autre solution de contournement possible?

+0

try '' set test = 'echo" $ cwd "| awk -F "/" '{print $ 3}' '' ... – Sundeep

+0

et vous auriez besoin de '$ 4' pas' $ 3' – Sundeep

+0

N'écrivez pas de scripts [t] csh, ce n'est pas pour quoi il a été conçu et donc c'est très mauvais (google [csh pourquoi pas] (https://www.google.com/search?q=csh+why+not&ie=utf-8&oe=utf-8)). –

Répondre

1

Le côté arrière droit d'une déclaration de variable n'est pas une commande shell, vous ne pouvez donc pas utiliser de canal. Vous pouvez voir ceci avec:

$ set test = ls 
$ echo $test 
ls 

Pourquoi donne-t-il l'erreur confuse «variable non définie»? Qui sait. L'analyseur (t) csh est bizarre et plein de choses étranges comme ça, surtout quand on lui donne une mauvaise entrée. Il est l'un des scripts principales raisons de (t) csh est généralement déconseillée (comme quelqu'un a fait remarquer dans les commentaires) ;-)

Pour faire une commande shell, ajouter des accents graves comme ceci:

$ set test = `echo "$cwd" | awk -F "/" '{print $3}'` 
$ echo $test 
martin 

À ce propos, vous pouvez rendre ceci un peu plus court avec pwd:

$ set test = `pwd | awk -F "/" '{print $2}'`