/ / Použite „ktorý“ na nájdenie cesty prvého argumentu v Bash nefunguje - bash, ktorý

Použite „ktorý“ na nájdenie cesty prvého argumentu v Bash, ktorý nefunguje - bash, ktorý

Pracoval som na malom skripte, ktorý otvára gedit alebo akýkoľvek editor, ktorý mám v mojom Linuxovom boxe, aby som upravil iný skript, ktorý je v priečinku, ktorý je súčasťou PATH variabilné.

používam which nájsť cestu skriptu, aby som mohol dať cestu editorovi a začať upravovať tento skript. Názov skriptu je samozrejme prvým argumentom skriptu.

Problém je, že which nemôžem nájsť skript, keď je daný ako prvý argument iného skriptu, ale nájde cestu, ak ho použijem priamo.

Tu je príklad na objasnenie.

which script.sh
prints "/home/bla/bla/script_folder/script.sh

ale ak to použijem v takom skripte:

echo "ScriptPath: $(which 1)"
echo "ScriptName: $1"

Toto nebude fungovať z nejakého divného dôvodu. Viem, že umiestnenie skriptu použitého v argumente 1 je k dispozícii v mojej premennej PATH. Echo keď to dám, nič sa nevytlačí $(which 1), za predpokladu $1 je názov skriptu, ktorý hľadám. Nemám potuchy, prečo to tak je. Potom som sa rozhodol vložiť názov skriptu do premennej a potom použiť, aby som našiel všetko, čo nová premenná obsahuje (v mojom prípade názov skriptu), ale nebude fungovať.

ex:

scriptName="$1"
echo "$(which scriptName)"
This won"t work either.
Such a simple thing, and I cannot make it work for some weird reason. Any ideas why this is not working?

odpovede:

1 pre odpoveď č. 1

Ako komentoval @glenn jackman: musíte použiť $ na referenčné premenné, dokonca aj vo vnútri $( ), Tak príkaz echo "ScriptPath: $(which 1)" hľadá príkaz s názvom „1“. To, čo chcete, je echo "ScriptPath: $(which "$1")" (Všimnite si, že balenie premenných odkazov, ako je $1 v úvodzovkách je takmer vždy dobrý nápad). podobne:

scriptName="$1"
echo "$(which scriptName)" # doesn"t work, looks for a command named "scriptName"
echo "$(which "$scriptName")" # works as expected

0 pre odpoveď č. 2

Som si celkom istý, že máte zle s $ (ktoré 1) kde musíte zadať príkaz, ktorý chcete spustiť vnútri backticks: `ktoré $ 1`

echo "Script Path: `which $1`"
echo "Script Name: $1"