私は次の機能を持っています:
#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 found
(export
見てわかるように、後でわかりました)、これをより明確にするために何をすべきかわかりません。
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; }