二重引用符で関数を実行するには?

二重引用符で関数を実行するには?

私は次の機能を持っています:

#execute vim and then exit on err return
ve() {
    vim "$@" || exit
}
export -f ve

#compile c source -> asm source in new tab in xfce terminal
casm() {
  [ -z ${1} ] && return
  fname=$1
  xfce4-terminal --tab -e "bash -c "\""gcc -S $fname.c; ve $fname.s ;exec bash \""
}
export -f casm

この場合、ve関数( "vim andexit" == "ve")は2番目の二重引用符で呼び出されます(ここを参照:)gcc -S $fname.c; ve $fname.s ;exec bash。問題は、bashがエラーを発生させbash: ve: command not foundexport見てわかるように、後でわかりました)、これをより明確にするために何をすべきかわかりません。

2回目の試みでは、以下を試しました。

#compile c source -> asm source in new tab in xfce terminal
casm() {
  [ -z ${1} ] && return
  fname=$1
  xfce4-terminal --tab -e "bash -c "\""gcc -S $fname.c; $(ve $fname.s) ;exec bash \""
}
export -f casm

つまり、コマンドをサブシェルにしますが、開こうとすると ->Vim: Warning: Output is not to a terminalターミナルがクラッシュします。もしそうなら、問題はグローバル関数を二重引用符で囲んで安全にすることです。

ベストアンサー1

最初のソリューションは私のシステムで完全に機能します。

他のシステムでテストしてみてください。システムに問題がある可能性があります。

2番目の例では、以下を強制的にvim使用できます/dev/tty

ve() {     vim "$@" </dev/tty >/dev/tty || exit; }

おすすめ記事