Ich weiß, dass es für Alias-Anweisungen in der Datei .bashrc funktioniert. jedoch ein Shell-Skript ln_hook:Wie ein Alias in ein anderes Shell-Skript übertragen werden kann
#!/bin/sh
#filename: ln_hook
## http://stackoverflow.com/questions/3648819/how-to-make-symbolic-link-with-cygwin-in-windows-7
## https://cygwin.com/cygwin-ug-net/using-cygwinenv.html
## https://cygwin.com/cygwin-ug-net/using.html#pathnames-symlinks
# export CYGWIN="winsymlinks" # ln -s: The shortcut style symlinks with file extension '.lnk'
# export CYGWIN="winsymlinks:native" # ln -s: plain text file
ln_hook(){
if [[ "-s" == "$1" ]]; then
cmd /C mklink /H "$(cygpath -aw "$3")" "`cygpath -aw "$2"`"
else
echo -e "\033[32m >> $* \033[0m"
ln "$*"
fi
}
alias ln='ln_hook'
type ln
(type ln)
# cannot propagate to another shell script
./test_ln
$(dirname $0)/test_ln
## . ./ln_hook
## type ln
und anderen Shell-Skript:
#!/bin/sh
#filename: test_ln
type ln
Dann . ./ln_hook
läuft, Ausgang:
ln_hook
ln 是 `ln_hook' 的别名
ln 是 `ln_hook' 的别名
ln 是 /usr/bin/ln
ln 是 /usr/bin/ln
Gibt es eine Abhilfe die machen Alias effektiv beim Ausführen anderer Skripts?
Aliases sind in der Regel nicht im nicht-interaktiven Kontexten. Verwenden Sie Funktionen dafür. Verwenden Sie 'command ln', um zu vermeiden, dass Ihre Funktion rekursiv ist. –
Hi ~ Wenn ja, gibt es eine alternative Lösung für dieses Problem? – samm
Ja, man bash: builtin shell-butin [arguments] Führt die angegebene Shell builtin aus, übergibt ihr Argumente und gibt ihren Exit-Status zurück. Dies ist nützlich, wenn Sie eine Funktion definieren, deren Name mit einer eingebauten Shell übereinstimmt, wobei die Funktionalität der in der Funktion eingebauten Funktion erhalten bleibt. Die eingebaute CD ist auf diese Weise neu definiert. Der Rückgabestatus ist falsch, wenn Shell-Built-In kein Shell-Built-In-Befehl ist. – samm