0
ファイル内のエイリアス命令で動作することがわかりました.bashrc。 ただし、シェルスクリプトln_hook:エイリアスを別のシェルスクリプトに伝播させる方法
#!/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
と、別のシェルスクリプト:次に
#!/bin/sh
#filename: test_ln
type ln
. ./ln_hook
を実行し、出力:
ln_hook
ln 是 `ln_hook' 的别名
ln 是 `ln_hook' 的别名
ln 是 /usr/bin/ln
ln 是 /usr/bin/ln
は作るためにそこの回避策ですエイリアスは他のスクリプトを実行するときに有効ですか?
エイリアスは、一般的に非対話型のコンテキストでは使用できません。そのための関数を使用します。あなたの関数が再帰的になるのを避けるには、 'command ln'を使います。 –
こんにちは〜もしそうなら、この問題の代替ソリューションがありますか? – samm
はい、man bash: 組み込みシェル組み込み[arguments] 組み込みの指定シェルを実行し、引数を渡して終了ステータスを返します。これは、名前がシェル組み込み関数と同じである関数 を定義し、組み込み関数の機能をその関数内に保持する場合に便利です。このCD組み込み関数は、このように再定義されています。シェル組み込みコマンドがシェル組み込みコマンドでない場合、戻り状況はfalseです。 – samm